您的位置:首页 > 编程语言

【第一行代码笔记】(一)

2015-07-13 09:39 197 查看
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()方法来解决问题        
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: