我正在开发一个使用设备管理员权限固定屏幕的应用程序。
经过一些研究后我找到了一个解决方案:使用ADB,我可以手动将我的应用程序设置为设备管理员。
另一种解决方案是使用未嵌入我设备的NFC。
现在我想使用一种更简单的提供管理员权限的方式,所以我发现有一个意图要求用户进行设置。
这是我的代码,我在其中启动意图,在一个按钮点击:
final ComponentName deviceAdmin = new ComponentName(this, AdminReceiver.class);
mDpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
Privilegi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdmin);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
"Additional text explaining why this needs to be added.");
startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN);
}
catch (Exception e)
{
Toast.makeText(Splash.this,e.getMessage(),Toast.LENGTH_LONG).show();
}
}
});
这是AdminReceiver类:
public class AdminReceiver extends DeviceAdminReceiver {
@Override
public void onEnabled(Context context, Intent intent) {
Toast.makeText(context,"Device Admin Enabled", Toast.LENGTH_SHORT).show();
}
@Override
public CharSequence onDisableRequested(Context context, Intent intent) {
return "Device Admin Warning";
}
@Override
public void onDisabled(Context context, Intent intent) {
Toast.makeText(context, "Device Admin Disabled", Toast.LENGTH_SHORT).show();
}
@Override
public void onLockTaskModeEntering(Context context, Intent intent, String pkg) {
Toast.makeText(context, "Device Admin Kios Enabled", Toast.LENGTH_SHORT).show();
}
@Override
public void onLockTaskModeExiting(Context context, Intent intent) {
Toast.makeText(context, "Device Admin Kios Disabled", Toast.LENGTH_SHORT).show();
}
我的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"/>
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
使用ADB方法一切正常,但如果我尝试使用意图,它只是通过它而不显示任何内容。
在“onActivityResult”中,我得到0作为结果代码。
我在尝试之前恢复了工厂数据。
感谢。