Intent是在activity之间传递数据;Intent的传递分为显示传递和隐式传递
显式意图:调用Intent.setComponent() 或 Intent.setClassName() 或 Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。
隐式意图;不指明调用的名称,根据设置的action,data,category,Android系统会根据这三个特征找到最合适的组件并激活
显示意图;
1,界面意图的创建与启动 (调用系统的打电话的函数 ,str是需要获取的号码)
Intent intent =new Intent();//创建意图对象
intent.setAction(Intent.ACTION_CALL);//设置系统动作
intent.setData(Uri.parse("tel:"+str));//设置数据的来源
startActivity(intent);//启动意图
2,界面之间的数据传递;
//传递数据
//界面之间的跳转信息的传递
Intent intent = new Intent();
//将ip和端口传递到功能界面
intent.putExtra("ips", ips);
intent.putExtra("ports", ports);
intent.setClass(MainActivity.this, LightUI.class);//将获取到的数据传递到LighUI类中来获取
startActivity(intent);
//获取传递的数据
// 获得intent的iP和ports
Intent intent = getIntent();//创建获取显示意图的对象
String ip = intent.getStringExtra("ips"); //获取数据
String ports = intent.getStringExtra("ports");
3,使用包管理器启动意图
//使用包管理器测试
Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+str));
//包管理器
PackageManager pm=this.getPackageManager();
//判断是否存在
ComponentName cm=intent.resolveActivity(pm);
if(cm!=null){
this.startActivity(intent);
}else{
Toast.makeText(this, "请安装应用程序..", Toast.LENGTH_SHORT).show();
}
隐式意图
实现多个数据的返回;
onActivityResult() 方法
//监听器
public void onchange(View v){
//带返回值的意图
Intent intent =new Intent();
intent.setClass(this, SecondActivity.class);
//使用带返回值的方法启动意图
this.startActivityForResult(intent, REQUEST_CODE);
}
//接收意图的返回值
/**requestCode请求码
* resultCode结果码
* data获取到的数据
*
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==REQUEST_CODE&&resultCode==RESULT_CODE){
//获取SecondActivity界面传递的值
String num=data.getStringExtra("num");
text.setText(num);
}
}
返回数据的activity页面
//添加按钮的监听器
public void chan(View v){
String num="10086";
// 包装要返回的数据
Intent intent = new Intent();
intent.putExtra("num", num);
this.setResult(MainActivity.RESULT_CODE,intent);
this.finish();
}
自定义意图监听器
intent.setAction(Intent.ACTION_CALL);//设置系统动作
intent.setData(Uri.parse(tel:str)); tel:可以拨打电话的原因;
系统在创建意图时,配置了意图监听器;我们自己也可以实现意图监听器 ;例子如下;
意图监听器的配置xml页面;
<activity
android:name=".SecondActivity"> 将SecondActivity自定义意图监听器
<intent-filter>
<action android:name="com.newer.baihe"/> action的名字
<category android:name="android.intent.category.DEFAULT" />系统默认的类别,必须要写
自定义三个类别,可以直接访问其中的一个
<category android:name="com.baihe.aaa" />
<category android:name="com.baihe.bbb" />
<category android:name="com.baihe.ccc" />
<data
数据的访问协议
android:scheme="baihe" 相当于 tel:
android:host="baidu.com" 主机
android:path="/index.html" 路径
android:mimeType="text/*" 匹配多个
/>
</intent-filter>
</activity>
java代码访问上面自定义的意图监听器
// 带返回值的意图
Intent intent = new Intent();
intent.setAction("com.newer.baihe");// 访问自定义的action
intent.addCategory("com.baihe.aaa");// 访问类别
intent.setDataAndType(Uri.parse("baihe://baidu.com/index.html"),
"text/html");// 访问页面
startActivity(intent);// 启动意图