簡體   English   中英

Intent.CATEGORY_APP_CALCULATOR:ActivityNotFoundException

[英]Intent.CATEGORY_APP_CALCULATOR: ActivityNotFoundException

我正在嘗試在Android應用程序中打開默認計算器應用程序。 設備中安裝了兩個計算器:默認的Android計算器和Google Calculator

Intent calc = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_CALCULATOR);
startActivity(calc);

此代碼拋出ActivityNotFoundException並在logcat中顯示:

system_process W/IntentResolver: resolveIntent failed: found match, but none with CATEGORY_DEFAULT

此代碼具有相同的行為:

Intent calc = new Intent(Intent.ACTION_MAIN);
calc.addCategory(Intent.CATEGORY_APP_CALCULATOR);
startActivity(calc);

這是一個Android bug? 如何打開應用程序選擇器,讓用戶選擇默認應用程序?

堆棧跟蹤:

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)

這似乎是文檔指向的方式不起作用。 不過,此代碼通常會打開默認計算器應用程序。

Intent intent = new Intent();
intent.setClassName("com.android.calculator2", "com.android.calculator2.Calculator");
startActivity(intent);

上面的答案有效,但它沒有回答這個問題。 問題是如何通過類別隱式啟動計算器。 股票計算器(不是谷歌播放版本)在清單中有以下內容:

    <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>

問題很簡單。 如果如下所示修改了intent過濾器,則可以啟動計算器(在運行8.1的Pixel2上測試):

    <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類別是必需的(這是明確記錄的)。 問題是想要啟動活動的應用程序無法控制目標活動中的清單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM