首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Intent.CATEGORY_APP_CALCULATOR: ActivityNotFoundException

Intent.CATEGORY_APP_CALCULATOR: ActivityNotFoundException
EN

Stack Overflow用户
提问于 2017-03-20 11:48:20
回答 2查看 1.6K关注 0票数 1

我试图在android应用程序中打开默认的计算器应用程序。设备中安装了两个计算器:默认安卓计算器和谷歌计算器

代码语言:javascript
复制
Intent calc = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_CALCULATOR);
startActivity(calc);

这段代码正在抛出一个ActivityNotFoundException,并在logcat中显示:

代码语言:javascript
复制
system_process W/IntentResolver: resolveIntent failed: found match, but none with CATEGORY_DEFAULT

此代码具有相同的行为:

代码语言:javascript
复制
Intent calc = new Intent(Intent.ACTION_MAIN);
calc.addCategory(Intent.CATEGORY_APP_CALCULATOR);
startActivity(calc);

是安卓系统的窃听器?如何打开应用程序选择器,让用户选择默认应用程序?

堆栈跟踪:

代码语言:javascript
复制
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] sel=act=android.intent.action.MAIN cat=[android.intent.category.APP_CALCULATOR]} }
     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1805)
     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1514)
     at android.app.Activity.startActivityForResult(Activity.java:3930)
     at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50)
     at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79)
     at android.app.Activity.startActivityForResult(Activity.java:3890)
     at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859)
     at android.app.Activity.startActivity(Activity.java:4213)
     at android.app.Activity.startActivity(Activity.java:4181)
     at com.MyActivity.openCalc(MyActivity.java:202)
     at com.MyActivity.onOptionsItemSelected(MyActivity.java:191)
     at android.app.Activity.onMenuItemSelected(Activity.java:2914)
     at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:408)
     at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:195)
     at android.app.ActivityThread.main(ActivityThread.java:5461)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-20 12:22:39

这似乎是一种方法,文档指向的方式不起作用。然而,这段代码通常会打开默认的计算器应用程序。

代码语言:javascript
复制
Intent intent = new Intent();
intent.setClassName("com.android.calculator2", "com.android.calculator2.Calculator");
startActivity(intent);
票数 1
EN

Stack Overflow用户

发布于 2018-09-27 15:02:08

上面的答案有效,但它没有回答这个问题。问题是如何通过类别隐式地启动计算器。股票计算器(不是google版本)在清单中有以下内容:

代码语言:javascript
复制
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
        <category android:name="android.intent.category.APP_CALCULATOR" />
    </intent-filter>

问题很简单。如果意图过滤器被修改如下所示,可以启动计算器(在运行8.1的Pixel2上进行测试):

代码语言:javascript
复制
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.LAUNCHER" />
        <category android:name="android.intent.category.APP_CALCULATOR" />
    </intent-filter>

DEFAULT类别是必需的(这是明确的文档)。问题是,一个想要启动活动的应用程序无法控制目标活动中的清单。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42902805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档