android - 无法从 AccessibilityService 的 onServiceConnected() 启动 Activity(intent)

标签 android accessibilityservice

我正在从 AccessibilityServiceonServiceConnected() 方法开始一项 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/

相关文章:

android - 在android中使用无障碍服务检测 "shut-down/reboot menu"?

android - 声明应用不是 AccessibilityTool 以符合 google play 要求

android - 检测我的辅助功能服务是否已启用

android - 当 ViewPager 中的 Fragment 设置为当前页面时的回调

android - 主页图标向上指示器兼容操作栏

Android onAccessibilityEvent获取TextView的X和Y位置

Java Android 代码将在 Nougat 上运行。如何在其他安卓上运行

android - 在 Android 上使用 OpenAL 录音

java - 文件选择器的标题