根据Android专用设备文档,找不到getContext()



我知道类似的问题以前被问过好几次,但我已经问过了,它们对我没有帮助。我正在尝试将三星Tab a(Android 8.1)设置为一次性设备。我已经编写了一个运行良好的应用程序,但由于该设备将被公众使用,我需要将其锁定为售货亭模式。我正试图遵循下面链接中的开发人员指南,但立即遇到了问题
https://developer.android.com/work/dpc/dedicated-devices/lock-task-mode

因此,我尝试做的第一件事是根据给定的示例将应用程序列入白名单:

// Whitelist two apps.
private static final String KIOSK_PACKAGE = "com.example.kiosk";
private static final String PLAYER_PACKAGE = "com.example.player";
private static final String[] APP_PACKAGES = {KIOSK_PACKAGE, PLAYER_PACKAGE};
// ...
Context context = getContext();
DevicePolicyManager dpm =
(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName adminName = getComponentName(context);
dpm.setLockTaskPackages(adminName, APP_PACKAGES);

文档中不清楚这个代码应该放在哪里,但我已经将它放在了onResume()的覆盖中。

我在Android Studio中使用auto-import,但它告诉我找不到getContext()。我尝试过更改为getApplicationContext(),并按照其他地方的建议使用this,但后来它抱怨getComponentName()不应该有任何参数。我尝试过简单地删除上下文参数,使用context.getComponentName(),也不使用上下文变量。这些编译,但应用程序在设备上崩溃(在setLockTaskPackages())。

我怀疑关键是找出getContext()找不到的原因,然后希望其他一切都能到位。知道可能缺少什么吗?

如果使用activity,请使用关键字this,而不是getContext

getContext()用于片段中获取上下文。这是活动吗?您可以使用Yourclass.thisthis。你也可以通过这个了解你可以在上下文中使用什么

我遇到了同样的问题,所以我将解释解决方案是什么。在Android官方文档中,行中:

ComponentName adminName = getComponentName(context);

getComponentName()只是一个与Activity.java方法相似的名称。该文档的目的是在扩展AdminReceiver的类中使用getComponentName(Context context):(您必须实现它)

class   AdminReceiver : DeviceAdminReceiver() {
companion object {
fun getComponentName(context: Context): ComponentName {
return ComponentName(
context,
AdminReceiver::class.java
)
}
}
}

最新更新