Intent

来源:互联网 发布:ubuntu查找文件路径 编辑:程序博客网 时间:2024/06/07 02:49
1.Intent是Android程序中各组件之间交互的一种方式,不仅可以指明当前活动即将执行的动作,还可以在不同组件之间传递数据
   Intent一般用于启动活动、启动服务、以及发送广播
2.Intent用法分为两种:显式和隐式
①显式Intent
   Intent intent = newIntent(ActivityA.this,ActivityB.class);   //在ActivityA中使用Intent跳转到ActivityB
   startActivity(intent);
②隐式Intent:
AndroidManifest.xml
   <activity android:name=".ActivityB">
    <intent-filter>        <action android:name="com.example.ActivityB.ACTION_START" />   //定义<action>标签,表示活动ActivityB可以响应的action
    </intent-filter></activity>
ActivityA.java
Intent intent = new Intent("com.example.ActivityB.ACTION_START");
startActivity(intent);
如果新建Intent对象时添加了该语句:intent.addCategory("sth");
则对应即将通过Intent跳转到的活动必须在AndroidManifest.xml中的 <intent-filter>标签内注册这个category
3.其他隐式Intent用法:
①打开系统默认浏览器访问对应网址,如百度
Intent intent= new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
//setData()方法用于接收一个Uri对象,用于指定当前Intent正在操作的数据,通常是以字符串形式传入Uri.parse()方法中解析产生的
//可以在AndroidManifest.xml中的 <intent-filter>标签内添加<data>标签,指定该活动可以响应什么类型的数据
//①android:scheme:用于指定数据的协议部分,如 http 部分
//②android:host:指定数据的主机名部分:如 www.baidu.com 部分
//③android:port:指定数据的端口部分,一般在主机名后面的那一部分
//④android:path:指定主机名和端口之后的部分,如网址中跟在域名之后的部分
//⑤android:mimeType:指定可以处理的数据类型,允许使用通配符的方式进行指定
//<intent-filter>中包含的标签,通过Intent方式启动该活动的精准度越高
②打开拨号盘
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
4.使用Intent传递数据
ActivityA.java
   Intent intent = newIntent(ActivityA.this,ActivityB.class);   //在ActivityA中使用Intent跳转到ActivityB
   intent.putExtra("data_key",data_value);                           //添加数据到Intent中
   startActivity(intent);

ActivityB.java
   Intent intent = getIntent();                                                //获取Intent对象
   String data = intent.getStringExtra("data_key");             //获取活动A中传递过来的数据
   //对Intent传递的数据进行操作

5.返回数据给上一个活动
ActivityA.java
   Intent intent = newIntent(ActivityA.this,ActivityB.class);   //在ActivityA中使用Intent跳转到ActivityB
   startActivityForResult(intent,1);                                        //第二个参数是请求码(requestCode),只要是一个唯一值就可以

ActivityB.java
   Intent intent = new Intent();
   intent.putEtra("data_return"," statement");                        //设置向上一个活动返回的数据
   setResult(RESULT_OK,intent);                                        // 参数1:返回处理结果(resultCode):RESULT_OK 或者RESULT_CANCELED                        
   finish();                                                                               //返回上一个活动
 
ActivityA.java
   protected void onActivityResult(int requestCode, int resultCode,Intent data){
       switch(requestCode){
        case 1:
               if(resultCode == RESULT_OK){
                    String returnedData = data.getStringExtra("data_return");
               }
               break;
         default:
              break;
       }
  }
0 0
原创粉丝点击