【问题标题】:Unable to get permission: "android.permission.SET_ALARM"无法获得许可:“android.permission.SET_ALARM”
【发布时间】:2018-12-13 09:49:57
【问题描述】:

我制作了一个安卓应用程序,并使用 AlarmManager 和 Broadcast Receiver 来获取本地通知。但是我的 Receiver 类根本没有被调用。我回溯了这个问题,发现我的应用程序无法获得“SET_ALARM”权限。请在下面找到相同的屏幕截图。

截图

所以为了交叉检查权限问题,我在 MainActivity.java 中添加了以下代码来检查应用程序是否能够获得权限。我发现它无法获得请求的 SET_ALARM 权限。请在下面找到代码。

MainActivity.java

package com.dileepmanuballa224.alarm_test;

import android.Manifest;
import android.app.AlarmManager;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;


public class MainActivity extends AppCompatActivity {

    AlarmManager am;
    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if(ContextCompat.checkSelfPermission(this, Manifest.permission.SET_ALARM)!= PackageManager.PERMISSION_GRANTED){
            Log.d("Perm check:SET_ALARM", "Permission Denied");
            requestPermissions(new String[]{Manifest.permission.SET_ALARM},1);
        }else{
            Log.d("Perm check:SET_ALARM", "Permission Exists");
        }

        if(ContextCompat.checkSelfPermission(this, Manifest.permission.INTERNET)!= PackageManager.PERMISSION_GRANTED){
            Log.d("Perm check:INTERNET", "Permission Denied");
            requestPermissions(new String[]{Manifest.permission.SET_ALARM},1);
        }else{
            Log.d("Perm check:INTERNET", "Permission Exists");
        }

    }
    }

清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.dileepmanuballa224.alarm_test">
<uses-permission android:name="android.permission.SET_ALARM"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".AlarmReceiver"/>
        </application>

</manifest>

日志结果:

谁能帮我解决这个问题。

【问题讨论】:

    标签: android android-permissions


    【解决方案1】:

    您在 Manifest 中声明的权限不是该权限的正确值,该权限的实际值是这样的:

    <uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
    

    this,不存在这样的权限,这就是它拒绝权限以及不请求权限的原因,将权限更改为上述值,一切都会正常。

    如果你想验证,那么:

    if(ContextCompat.checkSelfPermission(this, Manifest.permission.SET_ALARM)!= PackageManager.PERMISSION_GRANTED){
                Log.d("Perm check:SET_ALARM", "Permission Denied");
                requestPermissions(new String[]{Manifest.permission.SET_ALARM},1);
            }else{
                Log.d("Perm check:SET_ALARM", "Permission Exists");
            }
    

    如果您检查Manifest.permission.SET_ALARM 的值,您会看到它是"com.android.alarm.permission.SET_ALARM",请看这里:

    【讨论】:

    • Android Studio 自动向我建议了权限,这就是问题开始的地方。现在它工作得很好。非常感谢兄弟:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 2016-11-09
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    相关资源
    最近更新 更多