我正在从 AccessibilityService
的 onServiceConnected()
方法开始一项 Activity 。
我成功启动了 AccessibilityService
,但无法从中启动设备管理 Intent 。
我调试了我的应用程序,服务成功启动并且 onServiceConnected()
也被称为 callDeviceAdmin()
也没有崩溃执行,但 DeviceAdmin intent 仍然没有启动。
public class AccessibilityEventService extends AccessibilityService {
public static final int REQUEST_CODE_FOR_ACTIVE_DEVICE_ADMIN = 100;
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
}
@Override
public void onInterrupt() {
Log.d("TAG", "EXECUTE ON Interrupt");
}
@Override
protected void onServiceConnected() {
callDeviceAdmin();
}
private void callDeviceAdmin(){
ComponentName mComponentName;
DevicePolicyManager mDevicePolicyManager;
mDevicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
mComponentName = new ComponentName(this, AdminReceiver.class);
try{
boolean isAdmin = mDevicePolicyManager.isAdminActive(mComponentName);
if (!isAdmin) {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mComponentName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "SaferCell wants device Administrator access");
getApplicationContext().startActivity(intent);
}
} catch (Exception e) {
Log.d("onAccessibilityEvent", e.getMessage());
e.printStackTrace();
}
}
}
更新
public class AdminReceiver extends DeviceAdminReceiver {
@Override
public void onEnabled(Context context, Intent intent) {
Toast.makeText(context, context.getString(R.string.device_admin_enabled), Toast.LENGTH_SHORT).show();
}
@Override
public CharSequence onDisableRequested(Context context, Intent intent) {
return context.getString(R.string.device_admin_warning);
}
@Override
public void onDisabled(Context context, Intent intent) {
Toast.makeText(context, context.getString(R.string.device_admin_disabled), Toast.LENGTH_SHORT).show();
}
@Override
public void onLockTaskModeEntering(Context context, Intent intent, String pkg) {
Toast.makeText(context, context.getString(R.string.kiosk_mode_enabled), Toast.LENGTH_SHORT).show();
}
@Override
public void onLockTaskModeExiting(Context context, Intent intent) {
Toast.makeText(context, context.getString(R.string.kiosk_mode_disabled), Toast.LENGTH_SHORT).show();
}
}
最佳答案
您也可以尝试您的代码,但我创建了一个演示辅助功能服务来尝试这个并且工作正常。
您必须添加 Intent 标志,因为您从 Activity 上下文外部启动 Activity 需要 FLAG_ACTIVITY_NEW_TASK
标志。
public class AccessibilityServiceDemo extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) {
}
@Override
public void onInterrupt() {
}
@Override
protected void onServiceConnected() {
super.onServiceConnected();
System.out.println("onServiceConnected");
Intent intent = new Intent().setComponent(new ComponentName("com.android.settings", "com.android.settings.DeviceAdminSettings"));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
关于android - 无法从 AccessibilityService 的 onServiceConnected() 启动 Activity(intent),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56984199/