[英]Hey , I am just started to code in android and getting error Permission Denial: not allowed to send broadcast in android
[英]App crashes with Permission Denial: not allowed to send broadcast android.intent.action.SCREEN_ON
我是廣播接收器的新手,並動態實現了廣播接收器,如下所示
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadcastReceiver mService=new StarterOnBoot();
registerReceiver(mService,filter);
在清單中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.autostartter">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<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/Theme.AutoStartTer">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.AutoStartTer.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".RuntimePermission"
android:label="@string/app_name"
android:theme="@style/Theme.AutoStartTer.NoActionBar">
</activity>
</application>
</manifest>
我還創建了一個按鈕,通過單擊手動發送廣播的人,如下所示
view.findViewById(R.id.button_second).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent();
intent.setAction(Intent.ACTION_SCREEN_ON);
MainActivity.instance_main.sendBroadcast(intent);
}
});
廣播服務是
package com.example.autostartter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
import java.util.logging.Handler;
public class StarterOnBoot extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Broadcast Hit", Toast.LENGTH_SHORT).show();
if(intent.getAction().equals(Intent.CATEGORY_HOME))
{
Intent i=new Intent(context,MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
if(intent.getAction().equals(Intent.ACTION_USER_UNLOCKED))
{
Intent i=new Intent(context,MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
if(intent.getAction().equals(Intent.ACTION_SCREEN_ON))
{
Intent i=new Intent(context,MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
if(intent.getAction().equals(Intent.ACTION_USER_PRESENT))
{
Intent i=new Intent(context,MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED))
{
Intent i=new Intent(context,MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
}
當用戶解鎖屏幕時,廣播正常工作。 但是,當我單擊按鈕時,應用程序崩潰並出現以下異常
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.autostartter, PID: 30645
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.SCREEN_ON from pid=30645, uid=10245
at android.os.Parcel.createException(Parcel.java:2074)
at android.os.Parcel.readException(Parcel.java:2042)
at android.os.Parcel.readException(Parcel.java:1990)
at android.app.IActivityManager$Stub$Proxy.broadcastIntent(IActivityManager.java:5089)
at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1059)
at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:458)
at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:458)
at com.example.autostartter.FirstFragment$2.onClick(FirstFragment.java:44)
at android.view.View.performClick(View.java:7185)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
at android.view.View.performClickInternal(View.java:7162)
at android.view.View.access$3500(View.java:819)
at android.view.View$PerformClick.run(View.java:27684)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7562)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:15351)
at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:15202)
at com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:15991)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2051)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2799)
我還獲得了覆蓋權限
請忽略與此問題不直接相關的任何錯誤。
將此權限添加到清單文件。
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.