我对编程还很陌生,我需要让我工作的应用程序充当设备所有者,以便它阻止其他应用程序被打开(应用程序的设备的想法),但随着我的从文档和 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}
您可能需要添加:
android:exported="true"
AndroidManifest.xml 中接收者的声明。