关于Intent知识点的总结

来源:互联网 发布:数学分析书籍知乎推荐 编辑:程序博客网 时间:2024/05/22 03:36

Intent:

  • Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的activity, service和broadcast receiver之间的交互。
  • Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来响应。

关键:应用与应用之间通信,同一个应用不同组件(activity,service,broadcastReceiver)通信  
         不同应用之间交互常用方法:
       1.Content Provider (数据共享,不需要Intent) 
         2.通过activity或broadcastReceiver中的ACTION来交互

eg:不同应用交互:(最简单的方式)
App1 发送方:
Intent intent = new Intent("XXX.XXX.XXX");//action一定要匹配才能接收到        intent.putExtra("intent_data","可以携带数据");        startActivity(intent);
App2 接收方:
<activity android:name=".BaseActivity">  <intent-filter> <action android:name="XXX.XXX.XXX" />  <category android:name="android.intent.category.DEFAULT" />  </intent-filter> </activity>

2.Intent 属性介绍:
  • Intent由以下各个组成部分:
  • component(组件):目的组件 :(类似 intent.setClass(Base1Activity.this, Base2Activity.class); )
       ComponentName cn = new ComponentName(Base1Activity.this, "包名.Base2Activity");         intent.setComponent(cn); 
  • action(动作):用来表现意图的行动
         Intent intent = new Intent();         intent.setAction("XXX.XXX.XXX"); // action可以是系统的,也可以是自定义的
  • category(类别):用来表现动作的类别
   在显示Intent跳转的时候,不需要指定category,但是隐示跳转的时候,指定了category,在清单文件必须加上该category属性

 Intent intent = new Intent("xxx.xxx.xxx"); //action// intent.addCategory("xxx.xxx.xxx"); //指定了category,则接收的时候必须指定,不然不能接收,category可以允许多个 startActivity(intent);  //没有指定category,则接收的时候加载默认的就可以了           
<activity            android:name=".BaseActivity">            <intent-filter>                <action android:name="XXX.XXX.XXX" />                <category android:name="xxx.xxx.xxx" />                <category android:name="android.intent.category.DEFAULT" />                      </intent-filter>                </activity>


  • data(数据):表示与动作要操纵的数据
  • type(数据类型):对于data范例的描写
  • extras(扩展信息):扩展信息 (可以把需要的参数传进来,带到另外的组件)intent.putExtras("xxx","xxx");
Intent intent = new Intent();  //data+type配合 用于调用系统组件,但是注意的是需要在清单文件下面配置各个权限intent.setAction(Intent.ACTION_VIEW);Uri data = Uri.parse("http://www.baidu.com");intent.setData(data);                startActivity(intent);
  • Flags(标志位):期望这个意图的运行模式
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//用于在非activity里面跳转到activity中
         intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//activity依次ABCD,想从D到B,加了这个就为AB,不加ABCDB
         intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);//activity不存在栈,用完即消。
         intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);//把activity设置为栈顶,经常与newIntent()配合使用。



0 0