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);// 启动意图