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);
    }
};
相关推荐
百***61871 分钟前
Spring的构造注入
android·java·spring
Tom4i7 分钟前
Kotlin 中的 inline 和 reified 关键字
android·开发语言·kotlin
yi诺千金1 小时前
Android U 自由窗口(浮窗)——启动流程(system_server侧流程)
android
清空mega3 小时前
第11章 网络编程
android·网络
自动化BUG制造器3 小时前
Android UI 线程不一定是主线程
android
无知的前端3 小时前
一文读懂-Jetpack与AndroidX
android·kotlin·android jetpack
河铃旅鹿5 小时前
Android开发-java版:SQLite数据库
android·数据库·笔记·学习·sqlite
旋律逍遥5 小时前
《Framework 开发》3、开发工具及命令行知识装备
android
啦啦9117145 小时前
安卓手机/平板/TV版 Rotation强制横屏显示工具!免ROOT可用!再推荐突破手机限制的3款神器
android·智能手机·电脑
汤面不加鱼丸6 小时前
flutter实践:混合app在部分android旧机型上显示异常
android·flutter