有没有办法使用 ADB 命令而不是设备策略管理器将应用程序列入锁定任务模式的白名单?

Posted

技术标签:

【中文标题】有没有办法使用 ADB 命令而不是设备策略管理器将应用程序列入锁定任务模式的白名单?【英文标题】:Is there a way to whitelist apps for lock task mode using ADB commands instead of Device policy manager? 【发布时间】:2020-11-17 21:08:03 【问题描述】:

我正在使用 startLockTask();我的应用程序中的方法锁定了我当前的任务/活动。我的应用程序也是设备所有者,并使用以下代码将我的应用程序包列入锁定任务模式,然后再调用 startLockTask();

try

   String PLAYER_PACKAGE = this.getPackageName();
   String[] APP_PACKAGES = PLAYER_PACKAGE;

   DevicePolicyManager dpm = (DevicePolicyManager) this.getSystemService(Context.DEVICE_POLICY_SERVICE);
   ComponentName mDeviceAdmin = new ComponentName(this, DeviceAdminSampleReceiver.class);

   if(!dpm.isDeviceOwnerApp(this.getPackageName()))
       return;
   

   // Whitelist app package for LockTask mode
   dpm.setLockTaskPackages(mDeviceAdmin, APP_PACKAGES);

   // First, confirm that this package is whitelisted to run in lock task mode.
   if (dpm.isLockTaskPermitted(this.getPackageName())) 
         this.startLockTask();

         // Enable the Home and Overview buttons so that our custom launcher can respond
         // using our custom activities. Implicitly disables all other features.
         dpm.setLockTaskFeatures(mDeviceAdmin,
                        DevicePolicyManager.LOCK_TASK_FEATURE_HOME |
                                DevicePolicyManager.LOCK_TASK_FEATURE_KEYGUARD |
                                DevicePolicyManager.LOCK_TASK_FEATURE_OVERVIEW);
    
catch (Exception e)

问题是有时我的应用不是设备所有者导致我无法运行:

dpm.setLockTaskPackages(mDeviceAdmin, APP_PACKAGES);

所以,我想知道是否有一种等效的方法可以使用一些 ADB 命令实现与“dpm.setLockTaskPackages”相同的行为。

谢谢。

【问题讨论】:

【参考方案1】:

为什么不强制这部分的设备管理员权限?在你的活动中类似的东西:

compName = new ComponentName(this, AppAdminReceiver.class);

Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, compName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "Explain why we need this permission");
startActivityForResult(intent, RESULT_ENABLE);

DevicePolicyManager manager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
   
if(manager != null && manager.isAdminActive(compName)) 
    // Device Admin

else 
    // Not Device Admin
    // Go back to previous Activity


编辑:

要使用 ADB 将 App 设置为设备所有者,您可以使用以下命令:

dpm set-device-owner com.package.name/.Package.DeviceOwnerReceiver 

请注意,如果您将应用程序设置为设备所有者,则在重置手机之前无法将其删除。

【讨论】:

dpm.setLockTaskPackages(mDeviceAdmin, APP_PACKAGES);仅适用于设备所有者,不适用于设备管理员。虽然可以请求管理员权限,但如果使用 adb 失败,则无法请求设备所有者

以上是关于有没有办法使用 ADB 命令而不是设备策略管理器将应用程序列入锁定任务模式的白名单?的主要内容,如果未能解决你的问题,请参考以下文章

adb简单命令及monkey使用

adb错误“'adb' 不是内部或外部命令,也不是可运行的程序或批处理文件。

adb devices找不到设备解决办法

“adb”不是内部或外部命令——解决方案

adb如何使用

adb devices连接不上设备