有没有办法在 React Native 项目中获得设备所有者访问权限?

问题描述 投票:0回答:1

我对编程还很陌生,我需要让我工作的应用程序充当设备所有者,以便它阻止其他应用程序被打开(应用程序的设备的想法),但随着我的从文档和 AI 帮助(ChatGPT 和 ClaudeAI)中理解,我没有取得任何成功。

也许一些有用的信息: 反应本机版本:0.64.4 SDK版本:30

我真的迷路了,任何帮助将不胜感激,提前致谢。

到目前为止,我所做的是使用以下代码创建一个 AdminReceiver.java 类:

    @Override
    public void onEnabled(Context context, Intent intent) {
        super.onEnabled(context, intent);
    }

    @Override
    public void onDisabled(Context context, Intent intent) {
        super.onDisabled(context, intent);
    }

我在AndroidManifest.xml中添加了对该类的引用:

    <receiver
        android:name=".AdminReceiver"
        android:permission="android.permission.BIND_DEVICE_ADMIN">
        <meta-data
            android:name="android.app.device_admin"
            android:resource="@xml/device_admin_receiver" />
        <intent-filter>
            <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
        </intent-filter>
    </receiver>

因此,我在 res/xml 文件夹中创建了具有必要(和一些不必要)权限的文件:

    <device-admin xmlns:android="http://schemas.android.com/apk/res/android">
        <uses-policies>
            <disable-camera />
            <disable-applications />
            <force-lock />
            <limit-password />
            <watch-login />
            <reset-password />
            <wipe-data />
        </uses-policies>
    </device-admin>

我将其添加到我的 MainApplication.java 中(但我相信它没有用......):

  @Override
  public void onCreate() {
    super.onCreate();
    
    // Initialize SoLoader
    SoLoader.init(this, /* native exopackage */ false);
    
    // Dispatcher for Expo modules
    ApplicationLifecycleDispatcher.onApplicationCreate(this);

    // Detailed logging (optional)
    try {
      DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
      ComponentName adminComponent = new ComponentName(this, AdminReceiver.class);
      
      Log.d("MainApplication", "Is Device Owner: " + 
            dpm.isDeviceOwnerApp(getApplicationContext().getPackageName()));
      Log.d("MainApplication", "Is Admin Active: " + 
            dpm.isAdminActive(adminComponent));
    } catch (Exception e) {
      Log.e("MainApplication", "Error checking device admin status", e);
    }
  }

我尝试使用该命令时的响应文本

adb shell dpm set-device-owner com.myGroup.myPackage/.AdminReceiver

错误:未知管理员:ComponentInfo{com.myGroup.myPackage/com.myGroup.myPackage.AdminReceiver}

java android react-native native
1个回答
0
投票

您可能需要添加:

android:exported="true"

AndroidManifest.xml 中接收者的声明。

© www.soinside.com 2019 - 2024. All rights reserved.