Android系统开发-判断相机是否在使用

AppOpsManager接口startWatchingActive(int[], OnOpActiveChangedListener) 监听相机是否被使用

  • 必须是系统应用
  • <uses-permission android:name="android.permission.WATCH_APPOPS"/> 权限
  • API>=30
    反射调用startWatchingActive(int[], OnOpActiveChangedListener):
java 复制代码
private void monitorCamera() {
    AppOpsManager mAppOps = (AppOpsManager) getSystemService(APP_OPS_SERVICE);
    try {
        Class appOpsManagerCls = Class.forName(AppOpsManager.class.getName());
        Field OP_CAMERA = appOpsManagerCls.getField("OP_CAMERA");
        DebugLog.d("OP_CAMERA " + OP_CAMERA.get(mAppOps));
        Method method = appOpsManagerCls.getMethod("startWatchingActive", int[].class, AppOpsManager.OnOpActiveChangedListener.class);
        method.setAccessible(true);
        method.invoke(mAppOps, new int[]{(int) OP_CAMERA.get(mAppOps)}, opActiveChangedListener);
    } catch (Exception e) {
        DebugLog.e("error " + e.getMessage());
    }
    //不用时,注销监听
    //mAppOps.stopWatchingActive(opActiveChangedListener);
}
//监听相机使用
AppOpsManager.OnOpActiveChangedListener opActiveChangedListener = new AppOpsManager.OnOpActiveChangedListener() {
    @Override
    public void onOpActiveChanged(@NonNull String op, int uid, @NonNull String packageName, boolean active) {
        DebugLog.d("packageName " + packageName + " active " + active);
    }
};
相关推荐
明天再做行么1 小时前
PHP8解析php技术10个新特性
android·php
Ting丶丶1 小时前
安卓应用安装过程学习
android·学习·安全·web安全·网络安全
恋猫de小郭4 小时前
IntelliJ IDEA 2024.3 K2 模式已发布稳定版,Android Studio Meerkat 预览也正式支持
android·android studio
找藉口是失败者的习惯7 小时前
Jetpack Compose 如何布局解析
android·xml·ui
Estar.Lee12 小时前
查手机号归属地免费API接口教程
android·网络·后端·网络协议·tcp/ip·oneapi
温辉_xh12 小时前
uiautomator案例
android
工业甲酰苯胺14 小时前
MySQL 主从复制之多线程复制
android·mysql·adb
少说多做34314 小时前
Android 不同情况下使用 runOnUiThread
android·java
Estar.Lee15 小时前
时间操作[计算时间差]免费API接口教程
android·网络·后端·网络协议·tcp/ip