我制作了一个android应用程序,并使用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>
日志结果:
任何人都可以帮助我解决这个问题。
答案 0 :(得分:5)
您在清单中声明的权限不是该权限的正确值,该权限的实际值为:
<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"
,在这里看到: