Android BroadcastReciever BOOT_COMPLETED SecurityException - PullRequest
0 голосов
/ 15 октября 2019

Я ищу в интернете 2 дня, но ничего не нахожу, это моя команда adb

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

и ``

Это мой код ошибки

Broadcasting: Intent { act=android.intent.action.BOOT_COMPLETED flg=0x400000 }
Security exception: Permission Denial: not allowed to send broadcast android.intent.action.BOOT_COMPLETED from pid=20913, uid=2000

java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.BOOT_COMPLETED from pid=20913, uid=2000
        at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:20474)
        at com.android.server.am.HwActivityManagerService.broadcastIntentLocked(HwActivityManagerService.java:4226)
        at com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:21189)
        at com.android.server.am.ActivityManagerShellCommand.runSendBroadcast(ActivityManagerShellCommand.java:614)
        at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:154)
        at android.os.ShellCommand.exec(ShellCommand.java:96)
        at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:16149)
        at android.os.Binder.shellCommand(Binder.java:574)
        at android.os.Binder.onTransact(Binder.java:474)
        at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:4285)
        at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3286)
        at com.android.server.am.HwActivityManagerService.onTransact(HwActivityManagerService.java:837)
        at android.os.Binder.execTransact(Binder.java:675)

ИЭТО МОЙ МАНИФЕСТ ФИЛЬ

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mir.kitapkurdu"
  >

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

    <uses-permission android:name="com.huawei.permission.external_app_settings.USE_COMPONENT"/>`
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />




    <permission android:name="android.permission.NET_ADMIN"
        android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
        android:protectionLevel="signature">

    </permission>

    <application

        android:installLocation="internalOnly"
        android:name=".App"
        android:persistent="true"
        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"
        android:usesCleartextTraffic="true">


        <activity android:name=".Gonderici" />
        <activity android:name=".Register" />
        <activity android:name=".BookComplate" />
        <activity android:name=".SpeechGame" />
        <activity android:name=".BooksActvty" />
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Categories" />
        <activity android:name=".PageComplete" />
        <activity android:name=".Membership" />

        <receiver
            android:name=".SensorRestarterBroadcastReceiver"

            android:enabled="true"
            android:exported="true"
            >
            <intent-filter>

                <action android:name="android.intent.action.REBOOT" />
                <action android:name="android.permission.BOOT_COMPLETED" />
                <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED"/>
                <action android:name="android.intent.action.ACTION_USER_PRESENT" />
                <action android:name="com.mir.kitapkurdu.AN_INTENT" />
                <action android:name="android.intent.action.QUICKBOOT_POWERON"/>
                <action android:name="android.intent.action.ACTION_SHUTDOWN" />
                <category android:name="android.intent.category.HOME" />
            </intent-filter>
        </receiver>
        <service android:name=".services.BootUpService"
            android:permission="android.permission.BIND_JOB_SERVICE"/>

    </application>

</manifest>

Mainactvity.class

package com.mir.kitapkurdu;

import android.Manifest;
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.os.Build;
import android.os.Bundle;
import android.speech.SpeechRecognizer;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;

import com.mir.kitapkurdu.objects.User;
import com.mir.kitapkurdu.services.BootUpService;
import com.mir.kitapkurdu.services.Database;
import com.mir.kitapkurdu.services.NotificaionService;

public class MainActivity extends AppCompatActivity {
    private SpeechRecognizer mSpeechRecognizer;
    private Intent mSpeechRecognizerIntent;
    private String space = " ";
    private Button ileri;
    private TextView ekranayazdir;
    private TextView startVoiceInput;
    private Database db;
    public BroadcastReceiver br = new SensorRestarterBroadcastReceiver();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        db= new Database(MainActivity.this);
        User user=new User();
        user = db.getLastAddedUser();
        if (user.user_name==null)


        {

            serviceControl();
          /*  BootUpService mBootUpService = new BootUpService();
            Intent mServiceIntent = new Intent(getApplicationContext(), mBootUpService.getClass());
            startService(mServiceIntent);*/
            broadcastIntent();
            Intent intent = new Intent(this, Membership.class);

            // intent.putExtra("category_id", 59);
            startActivity(intent);
            finish();

        }else{

            serviceControl();

          /*  BootUpService mBootUpService = new BootUpService();
            Intent mServiceIntent = new Intent(getApplicationContext(), mBootUpService.getClass());
            startService(mServiceIntent);*/
            broadcastIntent();
            Intent intent = new Intent(this, Gonderici.class);
            intent.putExtra("user_id", user.user_id);
            startActivity(intent);
            finish();
        }



    }


    private void serviceControl(){
        NotificaionService mSensorService = new NotificaionService(getApplicationContext());
        Intent mServiceIntent = new Intent(getApplicationContext(), mSensorService.getClass());
        if (!isMyServiceRunning(mSensorService.getClass())) {
            startService(mServiceIntent);
        }
    }
    private boolean isMyServiceRunning(Class<?> serviceClass) {
        ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
            if (serviceClass.getName().equals(service.service.getClassName())) {
                Log.i ("isMyServiceRunning?", true+"");
                return true;
            }
        }
        Log.i ("isMyServiceRunning?", false+"");
        return false;
    }
    @Override
    protected void onResume() {
        super.onResume();




    }

    public void broadcastIntent() {
        ComponentName receiver = new ComponentName(getPackageName(), "com.mir.kitapkurdu.SensorRestarterBroadcastReceiver");
        PackageManager pm = MainActivity.this.getPackageManager();

        pm.setComponentEnabledSetting(receiver,
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);

        Intent intent = new Intent();
        intent.setComponent(receiver);
        sendBroadcast(intent);
    }

    @Override
    protected void onStop() {
        super.onStop();

    }



}

, пожалуйста, помогите мне, я попробую все в Интернете, но нет результатов. Я думаю, что эта проблема с разрешением, что я могу сделать вФайл манифеста, помогите мне, я хочу, чтобы эта передача получала при запуске: (

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

В настоящее время вы настроили <action android:name="android.permission.BOOT_COMPLETED" /> в качестве фильтра намерений, который не будет работать.

Добавьте <action android:name="android.intent.action.BOOT_COMPLETED" /> в фильтр намерений вашего SensorRestarterBroadcastReceiver, затем перезагрузите устройство.

0 голосов
/ 15 октября 2019

В документах сказано:

Это защищенное намерение, которое может быть отправлено только системой.

https://developer.android.com/reference/android/content/Intent#ACTION_BOOT_COMPLETED

Что означаетчто вы не можете отправить это намерение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...