我编写了一个启用了设备管理员(DevicePolicyManager)并安装的应用程序.但是当我想要卸载它时,它会返回失败并显示此消息
WARN/PackageManager(69):不删除包com.mypackage.test:具有活动设备管理员
如何卸载或以程序方式卸载?谢谢.
该装置策略管理器API文档和安卓5.0概述都提到了一些关于设备所有者的应用程序.如何将我的应用设置为设备所有者?
编辑:除了root和NFC之外还有其他方法吗?请分享.
我在测试期间在 Google Play 管理中心的预发布报告中遇到错误。错误信息如下:
java.lang.SecurityException: No active admin ComponentInfo{com.google.android.apps.mtaas.deviceadmin/com.google.android.apps.mtaas.deviceadmin.DeviceAdminReceiver}
Run Code Online (Sandbox Code Playgroud)
此错误特别发生在 Android 10 (SDK 29) 中。完整的错误摘要如下:
Exception Process: com.google.android.apps.mtaas.deviceadmin, PID: 4380
java.lang.SecurityException: No active admin ComponentInfo{com.google.android.apps.mtaas.deviceadmin/com.google.android.apps.mtaas.deviceadmin.DeviceAdminReceiver}
at android.os.Parcel.createException (Parcel.java:2088)
at android.os.Parcel.readException (Parcel.java:2056)
at android.os.Parcel.readException (Parcel.java:2004)
at android.app.admin.IDevicePolicyManager$Stub$Proxy.setNetworkLoggingEnabled (IDevicePolicyManager.java:15305)
at android.app.admin.DevicePolicyManager.setNetworkLoggingEnabled (DevicePolicyManager.java:11627)
at com.google.android.apps.mtaas.deviceadmin.EnableNetworkLogging.onStart (EnableNetworkLogging.kt:27)
at android.app.Instrumentation$InstrumentationThread.run (Instrumentation.java:2209)
Caused by android.os.RemoteException: Remote stack trace:
at com.android.server.devicepolicy.DevicePolicyManagerService.getActiveAdminWithPolicyForUidLocked (DevicePolicyManagerService.java:3259)
at com.android.server.devicepolicy.DevicePolicyManagerService.getActiveAdminOrCheckPermissionForCallerLocked (DevicePolicyManagerService.java:3155)
at com.android.server.devicepolicy.DevicePolicyManagerService.getActiveAdminForCallerLocked (DevicePolicyManagerService.java:3136)
at com.android.server.devicepolicy.DevicePolicyManagerService.enforceCanManageScopeOrCheckPermission (DevicePolicyManagerService.java:7218)
at com.android.server.devicepolicy.DevicePolicyManagerService.enforceCanManageScope (DevicePolicyManagerService.java:7204)
Run Code Online (Sandbox Code Playgroud)
我需要帮助来解决这个特定错误。任何帮助或指导将不胜感激。
java android device-admin android-securityexception google-developers-console
我已将项目从使用GCM迁移到使用Firebase.当设备处于唤醒状态或最近处于睡眠状态时,推送通知会通过确认,但如果我离开设备一小时,则在我唤醒设备之前不会发送推送.
Android文档说,如果您需要唤醒设备以传递消息,请使用优先级设置为高的FireBase.它还说设备管理应用程序不受Doze限制,我的应用程序是一个设备管理应用程序.
我想我会提到当我将项目从GCM迁移到FCM时,我只在firebase控制台中指定了包名,而不是指纹.
我试过了什么
将优先级设置为高
{
"time_to_live": 300000,
"delay_while_idle": false,
"android": {
"priority": "high"
},
"data": {
"message": "PING_DEVICE",
"time": "21/01/2018 16:20:28",
"pushguid": "10062"
},
"registration_ids": [
"eOMT........"
]
}
Run Code Online (Sandbox Code Playgroud)
设定生存时间,以便最终传达信息.delay_while_idle设置为false,2016年9月后FCM将忽略此值.
设备管理员应用程序不受Doze的影响,我的设备管理员应用程序,但我还明确将应用程序添加到设置 - >电池 - >优化中的Doze白名单中.这是通过设置应用程序手动完成的,而不是以编程方式在代码中完成
我已经离开我的设备睡了3个小时,没有推动通过.我还使用adb将设备置于Doze中.当adb将设备置于Doze中时,没有收到推送,当adb将设备从Doze中取出时,推送就会通过.
进一步的想法我没试过.
我的推动是数据消息.这是因为我不希望推送到设备上的通知栏并让用户单击它来执行功能.用户没有与设备管理应用程序的交互.因此,数据消息由处理
onMessageReceived(RemoteMessage remoteMessage)
Run Code Online (Sandbox Code Playgroud)
我相信通知消息会唤醒设备,这是我需要的,但我希望应用程序处理推送,而不是用户.我可以拥有通知和数据但是onMessageRecievied处理功能的消息吗?
有没有人经历过类似的事情或有任何解决方案?
[编辑1]我在下面找到了以下链接,说明您可以发送通知和数据的消息,但如果应用程序在后台,则会显示通知,但只有在用户单击通知时才会执行数据.这不是我想要的,因为我希望数据立即在onMessageRecived中执行.
[EDIT2]我已向应用添加了以下代码和权限.该应用程序现在要求用户将应用程序列入白名单,因此我单击是.然后我通过adb将设备放入Doze并发送推送.在我将设备退出打盹模式之前,没有任何事情发生.所以,不幸的是,这不起作用.
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Intent intent = new Intent();
String packageName = getPackageName();
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
if (!pm.isIgnoringBatteryOptimizations(packageName)) {
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
startActivity(intent);
}
}
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
Run Code Online (Sandbox Code Playgroud)
[EDIT3]
我已经做了进一步的测试,试图找出问题并将我的Web应用程序代码排除在外.我通过adb和使用过的FireBase控制台将设备置于Doze中以发送推送.推送正确 …
我一直试图通过程序锁定设备.但我还是找不到解决方案.我想通过程序锁定Android froyo2.2.我尝试过keyguardmanager和DeviceAdminManager.
我的应用是远程锁定设备.收到带有某些代码字的消息后,它会锁定电话.我发现很多Api_demo程序作为解决方案,但我不能单独提取锁定代码并找到解决方案.
我正在尝试让我的应用程序设备管理员,我按照设备管理员SAMPLE备注 或TUTORIAL在此处提供的一些注意 事项,但仍无法实现它.
有人可以指出一个相同的工作示例,我只需要确保卸载应用程序,用户需要输入我的应用程序中设置的密码.
任何帮助都会有用,提前谢谢
用户希望我的应用程序在使用后关闭屏幕.目前,我使用设备管理员权限实现此目的,DevicePolicyManager.lockNow()如果安全设置设置为PIN/Pattern/FaceUnlock等,则可以正常工作.
但是,如果使用Slide/None,上面的命令只是将用户带到主屏幕(或者什么都不做),这是可以理解的,因为没有什么可以"锁定".在这种情况下有没有办法实现关闭屏幕?我的应用需要SDK> = 16,如果这很重要.
所以我想我的问题是:如何能在应用可靠地关闭屏幕(我不是拿着wakelock,我使用的是WindowManager-flags FLAG_TURN_SCREEN_ON中onAttachedToWindow()).
在我的应用程序"流"是:
-活动是由一个意图开始,而屏幕关闭,显示键盘锁以上/使用上述标志在屏幕上的开关
-用户积极驳回我的活动,我打电话lockNow()和finish()和用户希望屏幕关闭.如果用户使用none/slide lock,则不起作用,而是显示用户的主屏幕
谢谢!
我正在尝试向我的应用添加一个按钮,将其从设备管理员中删除,并使用下面的代码,但我的应用程序崩溃了.
码:-
按钮点击: -
{
ComponentName devAdminReceiver = new ComponentName(this, DemoDeviceAdminReceiver.class);
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
dpm.removeActiveAdmin(devAdminReceiver);
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,DemoDeviceAdminReceiver是一个扩展DeviceAdminReceiver的类.
错误日志: -
10-28 15:26:09.295: E/AndroidRuntime(26101): FATAL EXCEPTION: main
10-28 15:26:09.295: E/AndroidRuntime(26101): java.lang.IllegalArgumentException: Unknown admin: ComponentInfo{com.dragonnis.intellicover/com.dragonnis.intellicover.DemoDeviceAdminReceiver}
10-28 15:26:09.295: E/AndroidRuntime(26101): at android.os.Parcel.readException(Parcel.java:1331)
10-28 15:26:09.295: E/AndroidRuntime(26101): at android.os.Parcel.readException(Parcel.java:1281)
10-28 15:26:09.295: E/AndroidRuntime(26101): at android.app.admin.IDevicePolicyManager$Stub$Proxy.removeActiveAdmin(IDevicePolicyManager.java:2940)
10-28 15:26:09.295: E/AndroidRuntime(26101): at android.app.admin.DevicePolicyManager.removeActiveAdmin(DevicePolicyManager.java:183)
Run Code Online (Sandbox Code Playgroud) 我必须激活android的系统密钥锁(当您按下电源关闭/挂断按钮时获得的那个).看这里:

我已经浏览了文档,但我发现的一切都是PowerManager和KeyguardManager.两者似乎都不是解决方案:-(.
那么,每个人都知道如何从Android应用程序实现这一目标吗?(如果需要特殊权限,那没问题,但更改设备的设置不是解决方案......)
编辑:或者有人知道这绝对不可能吗?顺便说一句.带发送密钥的craigs解决方案不再起作用(请参阅注释).
我正在使用更新到4.3的Nexus 7.我有一个应用程序需要设备管理员权限锁定/擦除设备.我已将设备管理权限授予我在所有者资料上的应用程序.因此,当我切换到另一个用户配置文件时,我可以在设备管理应用列表中看到我的应用程序.但是当我在这个非所有者用户配置文件上给出一个Lock命令时,我得到的异常是"java.lang.SecurityException:uid XXXXXX没有活动的admin".
DevicePolicyManager isActiveAdmin()方法在此配置文件上也返回true,但仍然无法执行操作并导致应用程序崩溃.
我假设一旦设备管理员设置为所有者用户配置文件,它会自动应用于所有其他用户配置文件.任何想法,然后为什么会发生这种情况?此外,是否有任何文档指出我的应用程序应该采取什么谨慎措施,以便在我的应用程序需要设备管理员权限时处理多个用户配置文件