Блокировка установки определенного приложения android

Я пытаюсь создать приложение, чтобы заблокировать установку определенного приложения на основе имени пакета. Я попробовал использовать метод BroadcastReceiver, но приложение, похоже, вылетает. и спасибо за обзор и за помощь.

вот мой класс BroadcastReceiver:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;

public class MyReceiver extends BroadcastReceiver {

    Context context;
    String log = MyReceiver.class.getName();

    @Override
    public void onReceive(Context context, Intent intent) {

        this.context = context;
        if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")){
            Toast.makeText(context,"Package removed", Toast.LENGTH_LONG).show();
            Log.d(log,"Package removed");
        }
        if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")){
            Toast.makeText(context, "Package installed", Toast.LENGTH_SHORT).show();
            Log.d(log,"Package installed");
        }
    }
}

манифест:

<receiver
        android:name = "MyReceiver"
        android:enabled = "true"
        android:exported = "true">
        <intent-filter android:priority = "100">
            <action android:name = "android.intent.action.PACKAGE_ADDED"/>
            <action android:name = "android.intent.action.PACKAGE_REMOVED"/>
            <data android:scheme = "package"/>
        </intent-filter>

    </receiver>

журнал сбоев:

10-12 22:18:22.836 15429-15429/com.example.mohammed.broadcastreceiver E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.mohammed.broadcastreceiver, PID: 15429
java.lang.RuntimeException: Unable to instantiate receiver com.example.mohammed.broadcastreceiver.MyReceiver: java.lang.ClassNotFoundException: Didn't find class "com.example.mohammed.broadcastreceiver.MyReceiver" on path: DexPathList[[zip file "/data/app/com.example.mohammed.broadcastreceiver-1/base.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_dependencies_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_0_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_1_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_2_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_3_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_4_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_5_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_6_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_7_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_8_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.example.mohammed.broadcastreceiver-1/lib/arm64, /system/lib64, /vendor/lib64]]
    at android.app.ActivityThread.handleReceiver(ActivityThread.java:3287)
    at android.app.ActivityThread.-wrap20(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1719)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6692)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.mohammed.broadcastreceiver.MyReceiver" on path: DexPathList[[zip file "/data/app/com.example.mohammed.broadcastreceiver-1/base.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_dependencies_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_0_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_1_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_2_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_3_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_4_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_5_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_6_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_7_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_8_apk.apk", zip file "/data/app/com.example.mohammed.broadcastreceiver-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.example.mohammed.broadcastreceiver-1/lib/arm64, /system/lib64, /vendor/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    at android.app.ActivityThread.handleReceiver(ActivityThread.java:3282)
    at android.app.ActivityThread.-wrap20(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1719) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6692) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) 

Я не понимаю, как получение информации о том, что приложение установлено, позволяет вам его заблокировать. Кроме того, если вам нужна помощь при сбое, вы должны включить журнал сбоев.

TheWanderer 12.10.2018 23:12

нет, я просто тестирую с этим. Сначала я пытался с этим, потом, когда это сработало, и я увидел тост, я попробую другой блок кода. но пока я включу журнал сбоев, и я ценю ваше беспокойство.

Mohamed Najb 12.10.2018 23:15

@TheWanderer здесь я только что включил журнал сбоев с редактированием

Mohamed Najb 12.10.2018 23:21

MyReceiver находится в подпапке?

TheWanderer 12.10.2018 23:22

@TheWanderer о да, это была главная проблема. Я не обратил на это внимания. Спасибо большое за вашу помощь

Mohamed Najb 12.10.2018 23:26

«Я пытаюсь создать приложение, чтобы заблокировать установку определенного приложения на основе имени пакета» - к моменту трансляции PACKAGE_ADDED приложение уже установлено.

CommonsWare 13.10.2018 00:11

Вы не сможете заблокировать установку приложений. Это не то, на что способно обычное приложение. Для этого вам нужно изменить диспетчер пакетов в Android и создать свой собственный дистрибутив.

Jeffrey Blattman 13.10.2018 02:02
0
7
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы неправильно зарегистрировали свой получатель.

В журнале сбоев говорится, что он не может найти MyReceiver в корне вашего проекта (где вы сказали, что он существует в вашем манифесте), но похоже, что это не так.

Убедитесь, что атрибут name указывает на фактическое местоположение.

Да, спасибо, файл был в подпапке, я только что изменил его местоположение, и теперь приложение работает

Mohamed Najb 12.10.2018 23:32

Другие вопросы по теме