隐式Intent

2019-03-04  本文已影响0人  爱做梦的严重精神病患者

  使用显示intent时,我们需要指定操作系统启动哪个activity
  使用隐式intent时,只需要告诉操作系统你想要做什么,操作系统就会去启动能够胜任工作任务的activity。如果找到多个符合的activity,用户会看到一个可选应用列表

1.隐式intent的组成

  基于以上信息,操作系统将启动适用的activity。通过配置文件中的intent过滤设置,activity会对外宣称自己是适合处理某类action的activity。

<activity
        android:name=".BrowserActivity"
        android:label="@string/app_name">
        <intent-filter>
               <action android:name="android.intent.action.VIEW"/>
               <category android:name="android.intent.category.DEFAULT"/>
               <data android:scheme="http" android:host="www.bignerdranch.com"/>
        <intent-filter>
</activity>

  必须在intent过滤器中明确地设置DEFAULT类别。action元素告诉操作系统,activity能够胜任指定任务。DEFAULT类别告诉操作系统,activity愿意处理某项任务

2.发送消息

Intent i = new Intent(Intent.ACTION_SEND);
i.setType("text/plain");
i.putExtra(Intent.EXTRA_TEXT,getCrimeReport());
i.putExtra(Intent.EXTRA_SUBKECT, getString(R.string.crime_report_subject));
startActivity(i);

  使用隐式intent启动activity时,也可以创建每次都显示的activity选择器。调用以下Intent方法并传入创建的隐式intent以及用作选择器标题的字符串:
public static Intent createChooser(Intent target, String title)
然后将createChooser(...)方法返回的intent传入startActivity(...)方法

Intent i = new Intent(Intent.ACTION_SEND);
i.setType("text/plain");
i.putExtra(Intent.EXTRA_TEXT,getCrimeReport());
i.putExtra(Intent.EXTRA_SUBKECT, getString(R.string.crime_report_subject));
i = Intent.createChooser(i, "title");
startActivity(i);

3.检查可响应任务的activity

  如果操作系统找不到匹配的activity,应用就会崩溃。首先通过操作系统中的PackageManager类进行自检
  Android设备上安装了哪些组件以及包括哪些activity,PackageManager类全部都知道。调用resolveActivity(Intent,int)方法,可以找到匹配给定Intent任务的activityflag标志MATCH_DEFAULT_ONLY限定只搜索带CATEGORY_DEFAULT标志的activity

PackageManager packageManager = getActivity().getPakcageManager();
if (packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) == null) {
        return;
} else {
    ...
    //启动intent
}
上一篇下一篇

猜你喜欢

热点阅读