我能使用这个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,提升Android应用的交互性和用户体验。
实验10的主题是“使用Intent进行通信”,这涉及到Android应用的基本架构和交互流程。在这个实验中,开发者创建了一个主界面,该界面包含两个功能:拨打电话和发送短信。用户通过点击对应的图片按钮来触发这两个操作...
前言 ...这就牵涉到一个问题:Intent 传递数据大小限制。 Intent到底能够携带多少数据呢? 使用Intent传送数据时,可能会出现异常 在Intent中传入一个Parcelable对象;例如传入一个bitmap对象。 代
- `Intent.createChooser(Intent target, CharSequence title)`:创建一个Intent选择器,让用户从多个可处理相同Intent的应用中选择。 8. **数据解析与匹配**: - Android系统会根据Intent的Action、Data和...
本教程将详细讲解如何使用Intent来实现特定的功能,包括打开新的Activity,拨打电话,以及在两个Activity之间传递参数。 首先,让我们讨论如何使用Intent打开另一个Activity。在Android中,Activity是用户界面的...
在拨打拨号场景中,我们通常使用`Intent.ACTION_DIAL`或`Intent.ACTION_CALL`这两个动作常量。 1. **ACTION_DIAL**: 使用`ACTION_DIAL`可以打开电话应用的拨号界面,但不会直接拨打电话。用户需要手动点击屏幕上...
本实验的主题“使用Intent回传数据”聚焦于如何通过Intent对象在活动(Activity)之间进行数据的传递,这对于理解和构建复杂的Android应用程序至关重要。 1. **Intent基础**: Intent主要分为显式Intent和隐式...
例如,当你需要从一个Activity启动另一个Activity时,你会使用显式Intent,并指定目标Activity的ComponentName。 ```java Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivity...
这个教程对于初学者来说非常实用,通过实际操作可以更好地理解Intent的工作原理。 总之,Intent是Android系统中不可或缺的一部分,理解和熟练使用Intent对于任何Android开发者都是至关重要的。通过不同的方法,...
- `startActivity(Intent intent)`: 启动一个新的Activity,使用传入的Intent。 - `startActivityForResult(Intent intent, int requestCode)`: 启动Activity并等待结果返回,适用于需要在新Activity结束后获取数据...
在Android应用开发中,Intent是一种强大的机制,用于在组件之间建立通信桥梁,特别是在...在TestIntent这个示例项目中,可能包含了实现上述功能的代码示例,开发者可以通过研究这些代码进一步理解Intent的工作原理。
当我们想要在应用程序中打开一个网页时,Intent系统可以帮助我们轻松实现这一功能。本篇将详细讲解如何利用Intent在Android中打开网页。 首先,我们需要了解Intent的基本概念。Intent在Android中充当着“信使”的...
本实验将深入探讨Android Studio中Intent的使用,帮助你更好地理解如何在不同的Activity之间跳转和传递信息。 首先,让我们了解Intent的基本概念。Intent分为两种类型:显式Intent和隐式Intent。显式Intent用于启动...
> className)`构造函数,传入目标Activity的Class对象,或者使用`Intent(String action)`指定一个ACTION,比如ACTION_VIEW来打开浏览器。 4. **传递数据** 当ListView的item被点击时,我们可以调用`startActivity...
通过这个实验,开发者不仅可以掌握Intent的基本用法,还能了解Android组件通信的核心机制。熟练运用Intent在Activity间传递数据,将极大地提升应用程序的交互性和用户体验。同时,理解Intent的显式与隐式使用方式,...
这个方法通常用于启动一个Activity,并期望在新Activity执行完某些操作后返回结果。当用户在新Activity中完成任务,如选择照片或输入信息,我们可以通过`setResult`设置返回结果,然后在原始Activity中重写`...
在这个名为"使用Intent拨打电话.zip"的压缩包中,我们可以看到一个针对如何使用Intent来拨打电话的示例。下面将详细解释Intent的工作原理以及如何实现拨打电话的功能。 首先,Intent是一个对象,它包含了启动一个...
在这个“java Intent的应用小例子”中,我们将深入理解Intent的基本概念和使用方法,以及它在实现乘法功能中的应用。 1. **Intent的基本概念**: - Intent是一个对象,用于封装应用程序中的动作、数据和目标信息。...
在Android开发中,Intent是一种非常重要的组件间通信机制。它被用来启动活动(Activity)、服务...在IntenTest这个示例中,我们可以看到Intent的各种用法和实际操作,通过研究和实践,可以加深对Intent的理解和运用。
2. Category:表示Intent的类别,例如CATEGORY_LAUNCHER表示这是一个启动应用程序的Intent,CATEGORY_DEFAULT表示组件默认能处理的Intent。 3. Data:描述了Intent要操作的数据,包括数据的MIME类型(如text/plain...