Intent
Intent(意图)
Intent 是一个消息传递对象。
Intent 可以通过多种方式促进组件之间的通信,基本用例主要包括三个:
1.启动Activity 2.启动服务 3.传递广播
1.Intent类型
Intent分为两种类型:
-
显示Intent
创建显示Intent启动Activity或者服务时候,系统将立即启动Intent对象中指定的应用组件。
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
Intent第一个参数是启动活动的上下文,第二个参数class是指定想要启动的活动。
然后在通过Acitvity提供的startActivity()方法来启动活动。
注意:启动服务时必须使用显示Intent
- 隐式Intent
创建隐式Intent时,将会在设备上的其它应用的清单文件中声明的Intent过滤器进行比较,找到匹配结果并启动该组件,如果有多个匹配结果,则系统会提供一个对话框,来让用户选择。
Intent intent1=new Intent("com.tiger.secondactivity");
intent1.addCategory("android.intent.category.DEFAULT");
startActivity(intent1);
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.tiger.secondactivity"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
注意:清单文件中需要写出对应
每个Intent只能指定一个action,但是能够绑定多个category。
2.Intent之间的数据传递
(1) 向下一个活动传递数据
- 发送数据
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("data1","data111");
intent.putExtra("data2",123);
startActivity(intent);
- 接收数据
String data1= getIntent().getStringExtra("data1");
int data2= getIntent().getIntExtra("data2",0);
Intent 中提供了一系列的putExtra() 方法重载,支持我们传递各种数据类型,然后在另一个活动中再通过getIntent().get[数据类型](“name”,默认值)来获取传递过来的值,存储的方式类似于键值对。
如果数据较多的话我们可以通过 :
Bundle bd= getIntent().getExtras(); String data1= bd.getString("data1");
(2)返回数据给上一个活动
首先我们需要修改启动方式为 startActivityForResult(),第二参数是请求码,用于在之后的回调中判断数据的来源。
- 在MainActivity中启动 SecondActivity
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivityForResult(intent,1);
- 在SecondActivity 中返回数据给MainActivity
Intent intent=new Intent();
intent.putExtra("data3","data333");
setResult(RESULT_OK,intent); //向上一个活动返回数据
finish(); //销毁当前活动
- 在MainActivity中接收返回值
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode==1){ //这个就说我们启动活动时指定的请求码
if(resultCode==RESULT_OK){ //这个是我们 setResult()时指定的值
String data3=data.getStringExtra("data3");
}
}
}
3.常用Intent:
//1.返回桌面
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
//2.打开 Google
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.google.com"));
startActivity(intent);
//3.打开拨号界面
Intent intent=new Intent();
// ACTION_CALL 表示直接拨过去,需要申请权限
intent.setAction(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
//4.给10086发送内容为“Hello”的短信
Uri uri = Uri.parse("smsto:10086");
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "Hello");
startActivity(intent);
//5.打开设置界面 (可以修改不同的Action跳转到不同的设置界面)
Intent intent = new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS);
startActivityForResult(intent, 0);
更多请参考:
https://developer.android.com/guide/components/intents-filters.html
https://developer.android.com/guide/components/intents-common.html