我能使用这个Intent吗?
Android提供了一个非常强大且易于使用的消息类型:Intent。你可以使用Intent来将应用程序变成一个高级的库,而且可以使代码模块化并可重用。例如,Android Home画面和AnyCut应用程序,使用Intent来创建快捷方式。
能够使用这么低耦合的API固然很好,但是,无法保障你发出的Intent能够被其它应用程序接收。这种情况一般在第三方程序中发生,像Panoramio和它的RADAR Intent。
这篇文章将描述一个技巧,通过这个技巧可以判断出系统中是否有应用程序能响应你想使用的Intent。下面的例子给出了一个辅助的方法,它能通过Package Manager查询系统中是否有app能响应特定的Intent。你的应用程序程序可以传入一个Intent到这个方法中,然后,显示或隐藏用户可能会去触发这个Intent的用户选项(举例)。
/**
* Indicates whether the specified action can be used as an intent. This
* method queries the package manager for installed packages that can
* respond to an intent with the specified action. If no suitable package is
* found, this method returns false.
*
* @param context The application's environment.
* @param action The Intent action to check for availability.
*
* @return True if an Intent with the specified action can be sent and
* responded to, false otherwise.
*/
public static boolean isIntentAvailable(Context context, String action) {
final PackageManager packageManager = context.getPackageManager();
final Intent intent = new Intent(action);
List<ResolveInfo> list =
packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
这里给出了这个辅助方法使用的示例:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
final boolean scanAvailable = isIntentAvailable(this,
"com.google.zxing.client.android.SCAN");
MenuItem item;
item = menu.findItem(R.id.menu_item_add);
item.setEnabled(scanAvailable);
return super.onPrepareOptionsMenu(menu);
}
在这个例子中,如果Barcode Scanner应用程序未安装的话,菜单项是置灰的。
另外,简单一些的方式是调用startActivity()时捕获ActivityNotFoundException异常,但这种方式只能在问题发生时进行处理,而不能事先相应地更新UI,且不能阻止用户做无用的动作。这里描述的技巧还可以在启动的时候询问用户是否要安装缺少的Package,然后,通过相应的URI,引导用户去Android Market下载。
分享到:
相关推荐
- `Intent.createChooser()`创建一个文件选择器对话框,让用户从多个可用的文件管理器应用中选择。 2. **获取选中文件的URI**: - 当用户选择文件后,`onActivityResult()`方法会被调用,其中包含了用户选择文件...
很抱歉,但根据您给出的信息,"task_2015_1-源码.rar" 和 "task_2015_1-源码.zip" 都是文件名,而没有提供具体的描述或标签来指示这个压缩包包含的IT知识点。通常,"源码"可能意味着这是一个包含编程源代码的文件,...
1. **AndroidManifest.xml**:这是每个安卓应用的核心,它定义了应用的组件(如活动、服务、广播接收器)、所需权限、应用版本和其他重要信息。 2. **编程语言**:Java曾是安卓开发的主要语言,但Kotlin已逐渐成为...
* 例句:I can hear the splash of water in the sink.(我能听到下水道流水的声音。) * 另外还有一个类似的短语Make a splash,意思是“引人注目”或“做出大的影响”。 二、Compact * Compact是英语单词,意思...
在数据存储方面,SQLite数据库的使用使我能有效地管理应用程序的数据,而SharedPreferences则为保存轻量级设置提供了便捷方式。在网络通信上,学习了使用HttpURLConnection和OkHttp进行HTTP请求,以及使用Retrofit和...
然而,由于提供的部分内容提到“创意时装秀变废为宝香山2021”,这看起来更像一个具体的时装活动,而非与安卓技术直接相关。 如果您希望了解的是关于安卓平台上的应用开发或者与安卓系统相关的技术知识,例如: 1....
很抱歉,根据您提供的信息,"魔鬼"这个标题和描述并没有提供任何具体的IT知识点。而标签为空,也无法提供额外的线索。压缩包子文件的文件名"omobatv-master"通常在GitHub上代表一个项目的主分支,可能是某种开源软件...