Intent 使用方法详解

 

Intent 是一个消息传递对象,主要用于组建之间的通讯,例如:启动Activity、启动Service、传递Broadcast等

  1. Intent 主要用途、流程图
  2. Intent 分类
  3. 隐式 Intent 接收过滤类型
  4. PendingIntent 使用方法
  5. Intent 7 大常用属性
  6. 使用ADB调试 Intent
  7. Intent 常用方法使用总结

欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息

微信公众号:ProgramAndroid

微信公众号:ProgramAndroid

我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。

Intent 流程图

Intent 流程图

Intent 流程图

1. Intent 主要用途

  1. 启动Activity
  • startActivity()
    无返回值,直接启动Activity

  • startActivityForResult() ,
    有返回值,返回值在onActivityResult() 回调

  1. 启动Service
  • startService()
    一次性操作

  • bindService()
    绑定组件,随组件生命周期结束而结束

  1. 传递Broadcast
  • sendBroadcast()
    普通无序广播

  • sendOrderedBroadcast()
    有序广播

  • sendStickyBroadcast()
    持续黏性广播

2. Intent 分类

  • 1.显示 Intent

按名称(完全限定类名)指定要启动的组件。
例如:

Intent intentActivity=new Intent(MainActivity.this,ActivityMethods.class);
startActivity(intentActivity);
  • 2.隐式 Intent

不会指定特定的组件,而是声明要执行的常规操作,从而允许其他应用中的组件来处理它
例如:

    public static void SendMms(Context context, String mmsString) {
        
        Intent sendIntent = new Intent();
        sendIntent.setAction(Intent.ACTION_SEND);
        sendIntent.putExtra(Intent.EXTRA_TEXT, mmsString);
        sendIntent.setType("text/plain");
        // 修改 Intnent 选择器Tittle 
        String title = context.getResources().getString(R.string.hello_world);
        Intent chooser = Intent.createChooser(sendIntent, title);
        
        // 验证是否有Activity 接收
        if (sendIntent.resolveActivity(context.getPackageManager()) != null) {
            context.startActivity(chooser);
        }
    }

3. 隐式Intent 接收过滤类型

应用可以接收哪些隐式 Intent,请在清单文件中使用 <intent-filter> 元素为每个应用组件声明一个或多个 Intent 过滤器。每个 Intent 过滤器均根据 Intent 的操作、数据和类别指定自身接受的 Intent 类型。 仅当隐式 Intent 可以通过 Intent 过滤器之一传递时,系统才会将该 Intent 传递给应用组件。

  • <action>

在 name 属性中,声明接受的 Intent 操作。该值必须是操作的文本字符串值,而不是类常量。

例如:
java 代码中启动的Intent的Action

Intent sendIntent = new Intent("String_action");

Androidmanfest.xml 中过滤标签如下:

   <activity android:name=".OneKeyClearAppsAddActivity"> 
      <intent-filter>
            <action android:name="String_action" />
        </intent-filter>
   </activity>
  • <data>

使用一个或多个指定数据 URI 各个方面(scheme、host、port、path 等)和 MIME 类型的属性,声明接受的数据类型。

  • <category>

在 name 属性中,声明接受的 Intent 类别。该值必须是操作的文本字符串值,而不是类常量。

例如:

<activity android:name="ShareActivity">
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="text/plain"/>
    </intent-filter>
</activity>
  • 禁止其他应用通过Intent 掉起自己组件

android:exported="false"

  • 应用主要入口点Action
    <action android:name="android.intent.action.MAIN" />

  • Launcher 图标入口Action
    以下两个元素必须配对使用,Activity 才会显示在应用启动器中。

     <intent-filter>
              <action android:name="android.intent.action.MAIN" />
              <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>

注意: CATEGORY_LAUNCHER 类别指示此 Activity 的图标应放入系统的应用启动器。 如果 <activity> 元素未使用 icon 指定图标,则系统将使用 <application> 元素中的图标

4. PendingIntent 使用方法

PendingIntent 对象是 Intent 对象的包装器。PendingIntent 的主要目的是授权外部应用使用包含的 Intent,就像是它从您应用本身的进程中执行的一样。

主要应用于以下场景

  • 通知
    NotificationManager

  • 应用小部件
    AppWidget

  • 定时任务
    AlarmManager

PendingIntent 使用注意事项:

  • PendingIntent.getActivity()
    适用于启动 Activity 的 Intent。

  • PendingIntent.getService()
    适用于启动 Service 的 Intent。

  • PendingIntent.getBroadcast()
    适用于启动 BroadcastReceiver 的 Intent。

5. Intent 7 大属性

  • 1 . Component Name(目标组件的全类、组件名称)

setComponent(),
getComponent(),
setClass() ,
setClassName()

  • 2 . Action (intent 将执行的动作)

setAction()
getAction()

  • 3 . Data (用于向Action 属性提供操作数据)

URI对象scheme://host:port/path (协议头,主机,端口,路径)

  • 4 . Type 分类

指定Data所指定的Uri对应的MIME类型,不指定会根据数据自动推导

  • 5 . Category 类别

为Action 提供额外的附件类别信息,可以有多个Category,但必须有一个default。

   <!-- 默认分类必须加上,否则会报错 -->
<category android:name="android.intent.category.DEFAULT"/>
  • 6 . Extra 数据载体

通过键值对进行数据存储,用于多个Action之间提供数据交换.

  • 7 . Flags 标记

标记组件如何启动,以及启动后如何对待 FALG_ACTIVITY_SINGLE_TOP
FALG_ACTIVITY_CLEAR_TOP等等)

6. 使用ADB调试 Intent

  • 语法
adb shell am start -a <ACTION> -t <MIME_TYPE> -d <DATA> \
  -e <EXTRA_NAME> <EXTRA_VALUE> -n <ACTIVITY>
  • eg :
adb shell am start -a android.intent.action.DIAL \
  -d tel:555-5555 -n org.example.MyApp/.MyActivity

7.Intent 常用方法使用总结

由于总结内容较多,已经另开文章讲述。

Intent 常用方法使用总结
文章链接如下:
http://www.jianshu.com/p/c8ed98bab620

至此,Intent 相关已经基本完成。

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。

既然都看到这里,领两个红包在走吧!
以下两个红包每天都可以领取

1.支付宝搜索 522398497,或扫码支付宝红包海报。

支付宝扫一扫,每天领取大红包

2.微信红包,微信扫一扫即可领取红包

 

微信扫一扫,每天领取微信红包

小礼物走一走,来简书关注我

 

posted @ 2017-10-25 15:40  程序员Android的博客  阅读(309)  评论(0编辑  收藏  举报