如何检查我的应用程序是否设置为默认或不是在android中?

问题描述:

我想检查我的应用程序是否设置为我在应用程序内部处理的Intents的默认应用程序。如何检查我的应用程序是否设置为默认或不是在android中?

作为一个例子ff多个应用程序支持打开指定的文件格式。我需要将我的应用程序作为我的代码的默认应用程序。如何使我的应用程序成为默认的(来自代码)?谁能帮我?

至少我想检查我的应用程序启动时,并重定向用户填写一些信息,如果我的应用程序未设置为设备上的默认值。

+0

请定义您的意思是“是默认”。 – CommonsWare 2010-07-27 05:44:31

+1

您的意思是说安装了两个不同的应用程序来处理同一活动?用于处理短消息服务的内置“消息传递”和“Handcent SMS”?如果用户已经设置了默认的应用程序 - 你想知道它是否属于你的?我理解你的问题是否正确? – 2010-07-27 07:46:47

+0

我从我的应用程序下载ics文件。另一个应用程序也可以下载ics文件。当用户尝试打开文件时,Android设备将列出可执行的应用程序。当用户选择我的应用程序打开ics文件时,我会从用户(关于用户)得到一些细节。如果他们选择我的应用程序作为默认,我不会询问有关用户的详细信息。为此,我需要检查我的应用程序是否为默认应用程序或不。如果它默认我会直接打开文件,否则我希望获得详细信息关于用户。 – SRS 2010-07-27 08:42:43

据我所知这是不可能的。该对话由系统处理 - 只有当用户从列表中选择您的应用时才会启动您的应用。

允许这样的行为会影响用户控制其默认应用程序的能力,从技术角度来看,意味着一个进程及其内存将不得不分配给列表中的每个应用程序。

要检查,如果应用程序是默认的特定意图类别 - How to identify if my app is set as Default by the user?

您可以使用此方法:

public static boolean isOurAppDefault(Context context) { 
    Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://google.com")); 
    ResolveInfo resolveInfo = context.getPackageManager().resolveActivity(browserIntent,PackageManager.MATCH_DEFAULT_ONLY); 
    String defaultBrowserPkg = null; 
    if (resolveInfo != null) { 
     if (resolveInfo.activityInfo != null) { 
      defaultBrowserPkg = resolveInfo.activityInfo.packageName; 
     } 
    } 
    return TextUtils.equals(context.getPackageName(), defaultBrowserPkg); 
} 

这是实际的一些编辑器或浏览器。在其他情况下,为意图使用不同的Uri数据。