android 8.1 disable unsupported sensor

如果device不支持某种sensor,可以在android/frameworks/base/core/java/android/hardware/SystemSensorManager.java里将其disabled掉。以disable proximity sensor为例。

复制代码
public SystemSensorManager(Context context, Looper mainLooper) {
        synchronized(sLock) {
            if (!sNativeClassInited) {
                sNativeClassInited = true;
                nativeClassInit();
            }
        }
 
        mMainLooper = mainLooper;
        mTargetSdkLevel = context.getApplicationInfo().targetSdkVersion;
        mContext = context;
        mNativeInstance = nativeCreate(context.getOpPackageName());
 
        // initialize the sensor list
        for (int index = 0;;++index) {
            Sensor sensor = new Sensor();
            if (!nativeGetSensorAtIndex(mNativeInstance, sensor, index)) break; 
            //disable p_sensor solution: Remove proximity sensor from sensor list.
            if ((sensor != null) && sensor.getType() == Sensor.TYPE_PROXIMITY){
                Log.i(TAG,"skip proximity sensor");
                continue;
            }
            mFullSensorsList.add(sensor);
            mHandleToSensor.put(sensor.getHandle(), sensor);
        }
    }

就是将p_sensor 从mFullSensorsList中移出。这一步基本上已经work了(SensorManager#getSensorList(8)得不到p_sensor的讯息),但是如果你的code还需要通过CTS测试,那么最好在android/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java的hasSystemFeature方法里做remove proximity sensor feature

复制代码
public boolean hasSystemFeature(String name, int version) {
        // allow instant applications
        synchronized (mAvailableFeatures) {
            final FeatureInfo feat = mAvailableFeatures.get(name);
            if (feat == null) {
                return false;
            } else {
                
                    //remove proximity sensor feature
                    if(name.equals("android.hardware.sensor.proximity")){
                        Log.w(TAG, "skip standard  proximity sensor");
                        return false;
                      }
                
                return feat.version >= version;
            }
        }
    }

这样一来PackageManager#hasSystemFeature(android.hardware.sensor.proximity) return false。

可用命令adb shell pm list features来检查device都support 那些功能。

或者尝试删除frameworks\native\data\etc下相关的配置文件

相关推荐
张拭心9 分钟前
“不卷 AI、不碰币、下班不收消息”——Android 知名技术大牛 Jake Wharton 的求职价值观
android·前端·aigc
某空m2 小时前
【Android】DrawerLayout实现侧边导航栏
android
stevenzqzq3 小时前
Android开发工作经历整理
android·简历
洞窝技术3 小时前
前端开发APP之跨平台开发(ReactNative0.74.5)
android·react native·ios
qq_717410015 小时前
FAQ09934:相机prevew时候出现水印问题
android
望风的懒蜗牛5 小时前
android studio开发UniComponent<SurfaceView>组件
android·uni-app·android studio
奔跑吧 android5 小时前
【android bluetooth 协议分析 14】【HFP详解 2】【蓝牙电话绝对音量详解】
android·bluetooth·hfp·bt·ag
2501_916007476 小时前
Fastlane 结合 开心上架 命令行版本实现跨平台上传发布 iOS App
android·ios·小程序·https·uni-app·iphone·webview
00后程序员张6 小时前
iOS 26 内存占用监控 多工具协同下的性能稳定性分析实战
android·macos·ios·小程序·uni-app·cocoa·iphone
奔跑中的蜗牛6667 小时前
一次崩溃率暴涨 10 倍的线上事故:从“无堆栈”到精准定位,到光速解决
android