我能使用这个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 传递数据大小限制。 Intent到底能够携带多少数据呢? 使用Intent传送数据时,可能会出现异常 在Intent中传入一个Parcelable对象;例如传入一个bitmap对象。 代
使用Context.startActivity() 或 Activity.startActivityForResult(), 传入一个intent来启动一个activity. 使用 Activity.setResult(), 传入一个intent来从activity中返回结果. 将intent对象传给Context.start...
使用Intent打开网页
使用Intent拨打电话
Andriod Intent使用代码举例
实验八 使用Intent回传数据
Android源代码 演示3个功能: (1)Intent打开另外一个Activity (2)Intent拨电话 (3)Intent在2个Activity间传递数据
在网上看到很多关于Intent的资料,说那么多,你也许还是一头雾水,到底如何使用Intent呢?这里总结一些重用的Intent使用,仅供参考。 下面直接给我学习的实例片段。 1,调用web浏览器 Uri myBlogUri = Uri.parse(...
这个例子主要是获取Android系统手机的电量信息,使用了intent.getExtras()方法来获取实现,关于此方法的使用,请参考以下的代码: public void onReceive(Context context, Intent intent) {//重写onReceiver方法 ...
使用隐式Intent,创建一个启动器应用来替换Android默认的启动器应用
Android Studio 实验二:Intent的使用
Android使用Intent实现Video功能
Intent的示例,详细的注释,详细讲解了startActivityForResult的用法,以及Bundle跟Intent保存对象的机制.
通过Intent实现Activity之间的切换,并利用Intent实现了数据的传递
系统intent的使用例子:google搜索,打开浏览器,打电话,发送短信,彩信,发邮件,打开摄像机,打开图库,播放音乐,打开录音等等,对应博客文章 Intent之系统Intent<一>
IntentIntent-Filter思维导图
Android使用Intent和Intentfilter进行通信,源于《疯狂Android讲义》值得学习
显式和隐式、过滤器intent的使用,欢迎有需要的朋友下载!
android Intent使用案例 含:播放多媒体、打电话、发短信、发送email、发邮件、google服务、组件component、action值自定义、显示地图/路径规划、选择应用、打开应用列表、搜索应用等意图实例。
实验七 使用Intent在Activity间传输数据