首页 > 解决方案 > Android 11 (API 30) 如何从我的应用程序启动默认计算器?

问题描述

我需要启动默认的 android 计算器应用程序。我在这个论坛上发现了类似的问题,但它并没有解决我的问题。 如何在我的应用程序上为所有手机调用 Android 计算器

这段代码似乎适用于旧版本的 android OS。但不适用于 android 11(可能是导致https://developer.android.com/about/versions/11/privacy/package-visibility的原因)。所以我尝试在清单中添加

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /> 

它也不起作用。我怎么解决这个问题?

谢谢。

标签: android

解决方案


makeMainSelectorActivity()方法是正确的,但我们可以尝试直接的方法作为后备:

import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    try {
      startActivity(
        Intent.makeMainSelectorActivity(
          Intent.ACTION_MAIN,
          Intent.CATEGORY_APP_CALCULATOR
        )
          .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
      )
    } catch (t: Throwable) {
      try {
        startActivity(
          Intent(Intent.ACTION_MAIN)
            .addCategory(Intent.CATEGORY_APP_CALCULATOR)
            .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        )
      } catch (t: Throwable) {
        Toast.makeText(
          this,
          "Sorry, I cannot find a calculator",
          Toast.LENGTH_LONG
        ).show()
      }
    }
  }
}

Toast如果您无法通过任何一种方式找到计算器应用程序,则会将其替换为您想要的任何错误状态。以下是各种测试设备上的结果:

  • Pixel 4/Android 11:启动股票计算器应用程序

  • 三星 Galaxy S8/Android 10:,Toast因为三星开发者没有宣传他们的计算器应用程序计算器应用程序,所以像你这样的第三方应用程序无法识别它

  • 诺基亚 7.1/Android 10:推出股票计算器应用程序

  • LG V20/Android 8:启动股票计算器应用程序

  • Pixel 3XL/Android 12 Beta:推出股票计算器应用程序

  • 三星 Galaxy A50/Android 11:Toast可能与 Galaxy S8 的原因相同

Intent当然欢迎您为特定的计算器应用程序(例如三星的应用程序)尝试一些对象,以期提高您的匹配率。不过最终:

  • 制造商不必包含计算器应用程序
  • 当前用户可能无权访问计算器应用程序(例如,受限个人资料)
  • 作为计算器的应用程序可能不会通过 将自己宣传为计算器应用程序CATEGORY_APP_CALCULATOR,在这种情况下,无法保证确定该应用程序计算器应用程序

因此,您需要满足许多(但不是全部)用户能够启动计算器应用程序的条件。


推荐阅读