`
lynen
  • 浏览: 128508 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

Can I use this Intent? (转自android developer)

阅读更多

Can I use this Intent?

 

Android offers a very powerful and yet easy to use tool called intents. An intent can be use to turn applications into high-level libraries and make code re-use something even better than before. The Android Home screen and AnyCut use intents extensively to create shortcuts for instance. While it is nice to be able to make use of a loosely coupled API, there is no guarantee that the intent you send will be received by another application. This happens in particular with 3rd party apps, like Panoramio and its RADAR intent.

While working on a new application, I came up with a very simple way to find out whether the system contains any application capable of responding to the intent you want to use. I implemented this technique in my application to gray out the menu item that the user would normally click to trigger the intent. The code is pretty simple and easy to follow:

/**
 * 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.
 */publicstaticboolean isIntentAvailable(Context context,String action){
    finalPackageManager packageManager = context.getPackageManager();
    finalIntent intent =newIntent(action);
    List<ResolveInfo> list =
            packageManager.queryIntentActivities(intent,
                    PackageManager.MATCH_DEFAULT_ONLY);
    return list.size()>0;}
Here is how I use it:
@Overridepublicboolean onPrepareOptionsMenu(Menu menu){
    finalboolean scanAvailable = isIntentAvailable(this,
        "com.google.zxing.client.android.SCAN");

    MenuItem item;
    item = menu.findItem(R.id.menu_item_add);
    item.setEnabled(scanAvailable);

    returnsuper.onPrepareOptionsMenu(menu);}
In this example, the menu is grayed out if the Barcode Scanner application is not installed. Another, simpler, way to do this is to catch the ActivityNotFoundException when calling startActivity() but it only lets you react to the problem, you cannot predict it and update the UI accordingly to prevent the user from doing something that won't work. The technique described here can also be used at startup time to ask the user whether he'd like to install the missing package, you can then simply redirect him to the Android Market by using the appropriate URI.
分享到:
评论

相关推荐

    Android利用Intent启动和关闭Activity

    【Android Intent 启动和关闭Activity】 在Android应用程序开发中,Intent是连接各个组件(如Activity、Service等)的关键桥梁,主要用于启动和关闭Activity。Intent不仅能够启动一个新的Activity,还能在Activity...

    android用于打开各种文件的intent.pdf

    Android 中使用 Intent 打开各种文件类型 Android 操作系统提供了 Intent 机制,允许应用程序之间进行交互和通信。Intent 是一个异步的消息机制,用于在应用程序之间请求或提供服务。通过使用 Intent,可以实现打开...

    Android的Intent实验

    在Android开发中,Intent是一种非常重要的组件,它用于在应用程序的不同组件之间传递消息,实现活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)以及内容提供者(Content Provider)之间的交互...

    android Intent例子源码

    android Intent例子源码android Intent例子源码android Intent例子源码android Intent例子源码android Intent例子源码android Intent例子源码

    Android Intent传递数据大小限制详解

    在sendBroadcast,startActivity时,我们会用到Intent。 Intent可以携带一些数据,比如基本类型数据int、Boolean,或是String,或是序列化对象,Parcelable与Serializable。 Intent传递数据时,如果数据太大,可能...

    android官网,android developer上的15个例子。

    在Android开发领域,官方网站Android Developer提供了丰富的资源和教程,其中包括一系列实用的例子代码,帮助开发者深入理解和应用Android SDK的各种功能。这些例子涵盖了从基础组件到高级特性的广泛内容,旨在提升...

    Android-Intent-数据存取-ContentProvider.doc

    * 使用 Intent 可以启动 Service,例如:Intent i = new Intent(this,MyService.class); startService(i); * 使用 Intent 可以传递数据,例如:Uri uri = Uri.parse("tel:10086"); Intent it = new Intent(Intent....

    Android中intent的使用

    在Android应用开发中,Intent是连接应用程序组件之间通信的关键机制,它用于启动其他组件或传递数据。本篇文章将深入探讨Intent的基本概念、类型、构造方法以及如何在Android中有效地使用Intent。 Intent是一种意图...

    android intent 使用总结

    Intent i = new Intent(Test.this, TestB.class); this.startActivity(i); } } ``` 隐式匹配(Implicit)是指根据 Intent 的描述,找到对应的组件,例如: ```java Intent i = new Intent(Intent.ACTION_VIEW, ...

    android各组件详解- Intent.

    标题与描述均指向了“Android各组件详解——Intent”,这一主题深入探讨了Android开发中至关重要的Intent组件。本文将从多个角度解析Intent的功能、应用场景及其内部结构,为开发者提供全面的理解。 ### Intent概述...

    Android程序间Intent跳转分析

    在Android开发中,Intent是一个至关重要的组件,它用于在应用程序之间传递消息,实现不同组件间的交互,如Activity、Service、BroadcastReceiver以及ContentProvider之间的通信。本文将深入探讨Android程序间Intent...

    Android应用:Intent打开另外一个Activity,Intent拨电话,Intent在2个Activity间传递参数

    在Android应用开发中,Intent是一种强大的机制,用于在组件之间进行通信。Intent不仅可以用来启动新的Activity,还可以启动服务、广播接收器等。本教程将详细讲解如何使用Intent来实现特定的功能,包括打开新的...

    Android Studio 实验二:Intent的使用

    在Android开发环境中,Intent是应用间通信的重要工具,它用于启动其他组件或传递数据。本实验将深入探讨Android Studio中Intent的使用,帮助你更好地理解如何在不同的Activity之间跳转和传递信息。 首先,让我们...

    Android通过Intent跳转地图应用(百度地图、高德地图)

    在Android开发中,Intent是一种强大的工具,用于在不同的组件之间传递数据和启动操作。当我们需要在应用程序中调用外部应用,如地图应用,如百度地图或高德地图,Intent是实现这一功能的关键。本篇文章将深入讲解...

    Android Button+Intent案例代码包

    在Android开发中,Button和Intent是两个至关重要的组件。Button是用户界面中常见的交互元素,用于触发特定操作;Intent则是Android系统中实现组件间通信的关键机制。本案例代码包"Android Button+Intent案例代码包...

    Android源码——Intent切换.zip

    在Android操作系统中,Intent是一种非常核心的组件,它充当了应用程序之间、组件之间通信的桥梁。Intent不仅可以用于启动一个新的Activity,还可以启动Service、BroadcastReceiver,甚至可以传递数据。本资料...

    Android 官方SDK文档 Intent

    `Intent`类是Android框架中的一个基础组件,它继承自`Object`类并实现了`Parcelable`与`Cloneable`接口。这意味着`Intent`对象可以被序列化,并且能够通过实现克隆来轻松地创建新的实例。`Intent`类的主要功能在于...

    android用于打开各种文件的intent

    标题与描述中的关键词“android用于打开各种文件的intent”揭示了本文将探讨的主题:在Android平台上,如何使用Intent机制来启动应用程序以打开不同类型的文件。Intent是Android四大组件之一,它提供了一种方式来...

Global site tag (gtag.js) - Google Analytics