Android 系统框架

1. Linux 内核层:为硬件提供底层的驱动,如显示驱动,音频驱动,照相机驱动,蓝牙驱动。

2.系统运行库层:通过C/C++库来为android系统提供主要的特性支持,如SQLite库提供数据库的支持,OpenGL|ES库提供了3D绘图的支持,WebKit库提供了浏览器内核的支持,同时,这一层还有Android运行时库,Android运行时库还包含了Dalvik虚拟机,它使得每一个Android应用都能运行在独立的进程当中,并且拥有自己的Dalvik虚拟机实例。

3.应用框架层:提供构建应用程序可能用到的各种API.

4.应用层:所有安装在手机上的应用

Android 四大组件

活动Activity,服务Service,广播接收器Broadcast Receiver,内容提供者 Content Provider

在活动中使用Menu

首先在res下的menu文件夹下,新建xml文件,每个item标签中定义一个菜单项

然后重写onCreateOptionMenu(Menu menu)方法,

public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.main, menu);        return true;    }

返回true表明允许创建的菜单显示出来,如果返回了false,创建的菜单则无法显示。

接下来定义菜单的响应事件。

public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()) {        case value:                        break;        default:            break;        }        return super.onOptionsItemSelected(item);    }

根据不同的id对不同的菜单项做出相应的响应。

使用Intent在活动之间穿梭

Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件指甲传递数据。Intent的用法大致可以分成两种,显式Intent和隐式Intent

1.使用显式Intent

Intent(Context packageContext,Class<?> cls)

接受两个参数,第一个参数 Context 要求提供一个启动活动的上下文,第二个参数Class则是指定想要启动的目标活动,通过这个构造函数就可以构造出Intent的意图

通过startActivity(Intent intent)启动目标活动

2.使用隐式Intent

不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent并找出合适的活动去启动。

什么叫合适的活动呢,简单来讲就是可以响应我们这个隐式Intent的活动,

通过在<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action和category。只有<action>和<actegory>中的内容同时能够匹配上Intent中指定的action和category时,这个活动才能响应该Intent

<category>标签包含了一些附加信息,更精确的指明当前活动。

Intent intent = new Intent("android.intent.action.MAIN");这是Intent的另外一个构造函数,直接将action的字符串传了进去。

每一个Intent中只能指定一个action,但却能指定多个category

调用Intent中的addCategory()方法来添加一个category

使用隐式Intent不仅可以启动自己程序内的活动,还可以启动其他程序的活动,这使得Android多个应用程序之间的功能共享成为了可能。

Intent intent = new Intent(Intent.ACTION_VIEW);intent.setData(Uri.parse("https://www.baidu.com"));startActivity(intent);

setData方法接收一个Uri对象,主要用于指定当前Intent正在操作的数据,而这些数据通常都是以字符串的形式传入到Uri.parse()方法中解析产生的。

与此对应,我们还可以在<intent-filter>标签中再配置一个<data>标签,用于更精确地指定当前活动能响应什么类型的数据。<data>标签中主要可以配置以下内容:
1.android:scheme:用于指定数据的协议部分

2.android:host:用于指定数据的主机名部分

3.android:port:用于指定数据的端口部分

4.android:path用于指定主机名和端口之后的部分

5.android:mimeType:用于指定可以处理的数据类型,允许使用通配符的方式进行指定

只有<data>标签中的指定内容和Intent中携带额Data完全一致时,当前活动才能够响应该Intent

button.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent(Intent.ACTION_VIEW);                intent.setData(Uri.parse("tel:10086"));                startActivity(intent);            }        });

点击按钮之后,会启动拨号应用

向下一个活动传递数据

Intent中提供了一系列putExtra()方法的重载,可以把我们想要的传递的数据暂存在Intent中,启动了另一个活动后,只需要把这些数据再从Intent中取出就可以了

String data = "Hello WebActivity";    Intent intent = new Intent(MainActivity.this, WebActivity.class);    intent.putExtra("extra_data", data);    startActivity(intent);
TextView tv = (TextView) findViewById(R.id.textView1);        Intent intent = getIntent();        String data = intent.getStringExtra("extra_data");        tv.setText(data);

返回数据给上一个活动

startActivityForResult()方法接收两个参数,第一个参数是Intent,第二个参数是请求码,用于在之后的回调中判断数据的来源。

mainActiviyt

button.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                String data = "Hello WebActivity";                Intent intent = new Intent(MainActivity.this, WebActivity.class);                startActivityForResult(intent, 1);            }        });

回调函数:

@Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        switch (requestCode) {        case 1:            if (resultCode == RESULT_OK) {                String returnedData = data.getStringExtra("data_extra");                Toast.makeText(getApplicationContext(), returnedData,                        Toast.LENGTH_SHORT).show();            }            break;        default:            break;        }    }

WebActivity.java

button.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent();                intent.putExtra("data_extra", "Hello MainActivity");                setResult(RESULT_OK, intent);                finish();            }        });

setResult()方法接收两个参数,第一个参数用于向上一个活动返回处理结果。一般只使用 RESULT_OK或者RESULT_CANCELED这两个值,第二个参数则是把带有数据的Intent传递回去

onActivityResult()方法带有三个参数,第一个参数是requestCode,即我们在启动活动时传入的请求码。第二个参数resultCode,即我们在返回数据时传入的处理结果,第三个参数,data,即写在这返回数据的Intent

首先通过检查reaestCode的值来判断数据来源,确定数据来源之后,再通过resultCode的值来判断处理结果是否成功。

如果想通过back键返回数据,可以通过重写onBackPressed()方法来解决问题        

更多相关文章

  1. 基于 Android(安卓)NDK 的学习之旅-----JNI 数据类型
  2. Android之SQLite数据库操作
  3. Android之Http通信
  4. Android(OPhone) 学习笔记 - SharedPreferences
  5. iScroll框架解析——Android(安卓)设备页面内 div(容器,非页面)over
  6. ContentProvider共享数据和ContentResolver的使用,Uri,UriMatche
  7. android studio + ndk + cmake + jna +sqlite c层报错SQLITE_CAN
  8. android 数据储存——--文件存储(2)
  9. Preference的使用

随机推荐

  1. 和几个大佬吃饭,聊了他们年收入,吓尿我了!
  2. 再见深圳!我要去成都搞IT了!
  3. 【第798期】你不懂JS:ES6与未来 语法(上)
  4. Linux主机lv操作篇-新增homelv
  5. 开源CMDB,灵活管理易于维护的资产管理系统
  6. 前端杂记0
  7. 【MVC设计模式】PHP文件上传实战案例和MV
  8. SD卡请将磁盘插入驱动器修复方法?
  9. 【PHP扩展知识】URL相关函数和API接口案
  10. 什么是电子面单?他们对电商运营有什么影响