下面列出了怎么用android.app.admin.DeviceAdminReceiver的API类实例代码及写法,或者点击链接到github查看源代码。
private static ComponentName queryComponentName(final Context context) {
final List<ComponentName> active_admins = requireNonNull((DevicePolicyManager) context.getSystemService(DEVICE_POLICY_SERVICE)).getActiveAdmins();
if (active_admins != null && ! active_admins.isEmpty()) for (final ComponentName active_admin : active_admins)
if (Modules.MODULE_ENGINE.equals(active_admin.getPackageName())) return active_admin;
final Intent intent = new Intent(DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED).setPackage(Modules.MODULE_ENGINE);
final List<ResolveInfo> admins = context.getPackageManager().queryBroadcastReceivers(intent, PackageManager.GET_DISABLED_COMPONENTS);
if (admins.size() == 1) {
final ResolveInfo admin = admins.get(0);
sDeviceAdminComponent = new ComponentName(Modules.MODULE_ENGINE, admins.get(0).activityInfo.name);
if (! admin.activityInfo.enabled) {
Analytics.$().event("device_admin_component_disabled").with(ITEM_ID, sDeviceAdminComponent.flattenToShortString()).send();
context.getPackageManager().setComponentEnabledSetting(sDeviceAdminComponent, COMPONENT_ENABLED_STATE_ENABLED, DONT_KILL_APP);
}
return sDeviceAdminComponent;
} // No resolve result on some Android 7.x devices, cause unknown.
if (BuildConfig.DEBUG) throw new IllegalStateException("Engine module is not correctly installed: " + admins);
return new ComponentName(Modules.MODULE_ENGINE, "com.oasisfeng.island.IslandDeviceAdminReceiver"); // Fallback
}
private String performTransfer(ComponentName target) {
ComponentName source =
com.afwsamples.testdpc.DeviceAdminReceiver.getComponentName(getActivity());
Log.i(getClass().getName(), "Transferring ownership from " + source
+ " to target " + target);
try {
PersistableBundle persistableBundle = new PersistableBundle();
persistableBundle.putString("random_key", "random_value");
mDevicePolicyManager.transferOwnership(source, target, persistableBundle);
return "Success!";
} catch (Exception e) {
Throwable cause = e.getCause();
if (cause instanceof InvocationTargetException) {
return getStackTrace(((InvocationTargetException) cause).getTargetException());
}
return getStackTrace(cause);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.transfer_ownership_dialog,
null);
final ListView listView = rootView.findViewById(R.id.list);
final EditText componentName = rootView.findViewById(R.id.component_name);
final EditText result = rootView.findViewById(R.id.result);
final Button transferButton = rootView.findViewById(R.id.transfer_btn);
final Intent intent = new Intent(DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED);
final List<String> items = new ArrayList<>();
final PackageManager packageManager = getActivity().getPackageManager();
final List<ResolveInfo> resolveInfos = packageManager.queryBroadcastReceivers(intent, 0);
for (ResolveInfo resolveInfo : resolveInfos) {
ActivityInfo activityInfo = resolveInfo.activityInfo;
if (activityInfo == null) {
continue;
}
items.add(activityInfo.packageName + "/" + activityInfo.name);
}
final ListAdapter adapter = new ArrayAdapter<>(getActivity(),
android.R.layout.simple_list_item_1, items);
listView.setAdapter(adapter);
listView.setOnItemClickListener((adapterView, view1, i, __) ->
componentName.setText(adapterView.getItemAtPosition(i).toString()));
transferButton.setOnClickListener(view -> {
ComponentName target =
ComponentName.unflattenFromString(componentName.getText().toString());
if (target != null) {
result.setText(performTransfer(target));
} else {
result.setText(R.string.transfer_ownership_invalid_target_format);
}
});
return rootView;
}
static SharedPreferences getSamplePreferences(Context context) {
return context.getSharedPreferences(DeviceAdminReceiver.class.getName(), 0);
}