【问题标题】:Android 11 (API 30) How start default calculator from my app?Android 11 (API 30) 如何从我的应用程序启动默认计算器?
【发布时间】:2021-08-01 18:50:10
【问题描述】:

我需要启动默认的安卓计算器应用程序。我在这个论坛上发现了类似的问题,但它并没有解决我的问题。 How to call Android calculator on my app for all phones

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

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

它也不起作用。我该如何解决这个问题?

谢谢。

【问题讨论】:

  • “为此我已经尝试过了”——请编辑您的问题并发布您的代码。您链接到的问题有几个答案。我们不知道您使用的是哪一个,也不知道您对您选择的答案中的内容进行了哪些修改。请注意,这些答案似乎都没有遵循the documented instructions for CATEGORY_APP_CALCULATOR
  • 感谢您的回答。我尝试了投票最多和最后一个。 CATEGORY_APP_CALCULATOR 的问题与stackoverflow.com/questions/42902805/… 相同,最后一个答案只是重新启动我的活动。

标签: android


【解决方案1】:

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:启动股票计算器应用

  • Samsung 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 将自己宣传为计算器应用程序,在这种情况下,无法保证确定该应用程序计算器应用程序

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

【讨论】:

  • 非常感谢您的所有这些解释。由于我只需要基本的操作,我认为自己编写一个计算器更有意义。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
  • 2019-04-04
  • 1970-01-01
  • 2012-05-17
  • 2023-04-04
  • 1970-01-01
  • 2011-03-12
相关资源
最近更新 更多