确定当前设备上是否存在活动?

时间:2010-05-20 23:51:33

标签: android android-activity

有没有办法检查并查看您的设备上是否存在活动?如果我有YouTube视频链接,我想在YouTube PlayerActivity中指定它。但是,如果由于某些原因他们没有它,我不想崩溃。

有没有办法检查并查看活动是否存在?我不认为我可以捕获运行时异常,因为startActivity()不会抛出它。

5 个答案:

答案 0 :(得分:76)

您可以使用必要的组件信息创建一个Intent对象,然后检查intent是否可调用。我在这里偶然发现了这个片段,没有指向实际线程的链接。

private boolean isCallable(Intent intent) {
        List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 
            PackageManager.MATCH_DEFAULT_ONLY);
        return list.size() > 0;
}

答案 1 :(得分:19)

这是最简单的方法:

boolean activityExists = intent.resolveActivityInfo(getPackageManager(), 0) != null;

它也是recommended by Google

  

要首先验证应用程序是否存在以接收意图,请在Intent对象上调用resolveActivity()。如果结果为非null,则至少有一个应用程序可以处理意图,并且可以安全地调用startActivity()。如果结果为null,则不应使用intent,如果可能,应禁用调用intent的功能。

答案 2 :(得分:7)

我最终做了:

        Intent intent = new Intent();
        intent.setClassName( "com.google.android.gsf", "com.google.android.gsf.login.AccountIntroActivity" );

        if(getContext().getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null) {
            getContext().startActivity( intent );
        } else {
            getContext().startActivity(new Intent(Settings.ACTION_ADD_ACCOUNT));
        }

这可以确保特定于Google的添加帐户意图存在,如果不存在,则可以使用一般更通用的ACTION_ADD_ACCOUNTS。

答案 3 :(得分:4)

  

我认为我无法抓住运行时   例外

实际上,这有效:

try {
    startActivity(new Intent(..));
} catch (ActivityNotFoundException e) {
    Toast.makeText(this, "Not installed.", LENGTH_SHORT).show();
}

答案 4 :(得分:0)

以下是我如何检查设备上是否有Activity

        Intent intent = new Intent(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tell//:" + phoneNumber));

        PackageManager manager = context.getPackageManager();
        List<ResolveInfo> activities = manager.queryIntentActivities(
                intent, 0);
        if (!manager.hasSystemFeature(
                PackageManager.FEATURE_TELEPHONY) || activities == null || activities
                .size() < 1) {
            Toast.makeText(
                    context,
                    "Sorry, there were no apps that worked with that request.",
                    Toast.LENGTH_SHORT).show();
        } else {
            context.startActivity(intent);
        }