缺少 Android Activity 识别权限

标签 android permissions activity-recognition

我的目标是 SDK 29, Activity 转换 API 在运行 29(即 Android 10)的设备上完美运行。根据文档,如果您的目标是 SDK 29,但在较低版本的 SDK 上运行,则应自动授予权限。

这两种我都试过,单独的和一起的

<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_REC‌​OGNITION"/>

我无法在弹出窗口中请求许可(没有任何反应)。当我尝试在 < Andorid 10 手机上注册 Transitions API 时,出现错误:

com.google.android.gms.common.api.b: 10: SecurityException: Activity detection usage requires the ACTIVITY_RECOGNITION permission

如果我将目标 SDK 设置为 28,那么在所有手机上一切正常,但由于其他原因我需要将目标设置为 29。我正在拔头发。 需要明确的是,它在 Android 10 上完美运行,只是不低于此版本。进一步说明的代码:

public void askForActivityPermission(View v) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            Log.d(TAG, "askForActivityPermission: q or greater");
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACTIVITY_RECOGNITION}, PERMISSION_REQUEST_ACTIVITY_RECOGNITION);
        } else {
            Log.d(TAG, "askForActivityPermission: less than q");
            moveNextStep();
        }
    }

    @Override
    public void onRequestPermissionsResult(
            int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

        String permissionResult = "Request code: " + requestCode + ", Permissions: " +
                Arrays.toString(permissions) + ", Results: " + Arrays.toString(grantResults);

        Log.d(TAG, "onRequestPermissionsResult(): " + permissionResult);

        if (requestCode == PERMISSION_REQUEST_ACTIVITY_RECOGNITION) {
            Log.d(TAG, "onRequestPermissionsResult: permission granted?");
            moveNextStep();

        }

最佳答案

API Level 29 中有一些更新。

1.给manifest文件添加权限

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

2.检查权限是否被授予:

if (ContextCompat.checkSelfPermission(thisActivity, 
    Manifest.permission.ACTIVITY_RECOGNITION)
      != PackageManager.PERMISSION_GRANTED) {
  // Permission is not granted
}

3.如果尚未授予权限,请请求权限:

ActivityCompat.requestPermissions(thisActivity,
arrayOf(Manifest.permission.ACTIVITY_RECOGNITION),
MY_PERMISSIONS_REQUEST_ACTIVITY_RECOGNITION);

这里有一些有用的文档。

https://developer.android.com/about/versions/10/privacy/changes#physical-activity-recognition

https://developers.google.com/fit/android/authorization

关于缺少 Android Activity 识别权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62360296/

相关文章:

android - 显示自定义对话框android时出现WindowManager BadTokenException

javascript - 在内存游戏中翻牌

使用 RxJava 的 Android 计时器

Android Activity 识别在 htc one X 中不起作用

android - lib模块和主模块之间如何通信

ruby - 为什么从我的 Ruby 脚本调用 mktemp 时提示权限被拒绝?

javascript - Firefox OS 设备或模拟器上的音频捕获

linux - 给予所有者的权限少于组的原因

android - 后台 Activity 识别

Android Activity 识别 java.lang.NullPointerException : Appropriate Api was not requested