Android Intent.ACTION_CHOOSER 与 Intent.ACTION_PICK_ACTIVITY

  次阅读 作者:智能小宝 来源:互联网 2016-01-14 09:26 我要评论(0)

1.Intent.ACTION_CHOOSER =android.intent.action.CHOOSER其作用是显示一个Activity选择器。

Intent提供了一个静态的createChooser方法,让我们能够更方便的创建这样一个Intent。具体的用法示例可以参考Launcher应用里Launcher.java的startWallpaper函数:

private void startWallpaper() {

closeAllApps(true);

final Intent pickWallpaper = new Intent(Intent.ACTION_SET_WALLPAPER);

Intent chooser = Intent.createChooser(pickWallpaper,

getText(R.string.chooser_wallpaper));

startActivityForResult(chooser, REQUEST_PICK_WALLPAPER);

}

这里是要找到所有能处理Intent.ACTION_SET_WALLPAPER请求的activity,其字符串表示为android.intent.action.SET_WALLPAPER。使用Eclipse搜索之后,在以下应用的AndroidManifest.xml文件都找到了能处理这个请求的activity:

packages/apps/Gallery

packages/apps/Launcher2

packages/wallpapers/LivePicker

所以,在Home界面 按Menu键 -- 点击壁纸 后自然就能在一个对话框里列出这些应用,让用户选择到哪里去设置壁纸了,如下图所示。

在上图中,用户点击任意一个列表项,都会激活其对应的Activity。用户设置壁纸的操作会在新启动的Activity里完成,例如用户点击上图中的 照片 项,则会进入到Gallery应用,在Gallery里完成壁纸设置,见下图。

2. Intent.ACTION_PICK_ACTIVITY介绍及两者区别

Intent.ACTION_PICK_ACTIVITY =android.intent.action.PICK_ACTIVITY 。

乍一看去,真看不出它和 Intent.ACTION_CHOOSER有什么区别。为了弄清这一点,笔者特地做了个试验,把上面设置壁纸的intent action改为Intent.ACTION_PICK_ACTIVITY,运行出来的界面如下图。

从界面上看去,和Intent.ACTION_CHOOSER的表现方式基本一致,但是点击以后却没有像Intent.ACTION_CHOOSER一样启动所选的Activity。笔者很快从Android源码里找到了原因。

对intent.ACTION_PICK_ACTIVITY action的处理位于Settings应用里,如下XML所示。

<activity android:name="ActivityPicker"

android:label="@string/activity_picker_label"

android:theme="@*android:style/Theme.Dialog.Alert"

android:finishOnCloseSystemDialogs="true">

<intent-filter>

<action android:name="android.intent.action.PICK_ACTIVITY" />

<category android:name="android.intent.category.DEFAULT" />

</intent-filter>

</activity>

咱们再到com.android.settings.ActivityPicker类里去看个究竟。

/**

* Handle clicking of dialog item by passing back

* {@link #getIntentForPosition(int)} in {@link #setResult(int, Intent)}.

*/

public void onClick(DialogInterface dialog, int which) {

Intent intent = getIntentForPosition(which);

setResult(Activity.RESULT_OK, intent);

finish();

}

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...