android删除feature

本文介绍如何在Android系统中移除NFC特性,包括在SystemConfig文件中将NFC加入不可用特性列表,并在SystemServiceRegistry中增加判断防止注册NFC服务。即便如此,还需注意可能存在的空指针异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android判断当前设备的支持哪些Feature

比如删除NFC feature:

Index: frameworks/base/core/java/com/android/server/SystemConfig.java
===================================================================
--- frameworks/base/core/java/com/android/server/SystemConfig.java	(版本 1412)
+++ frameworks/base/core/java/com/android/server/SystemConfig.java	(版本 1415)
@@ -25,6 +25,7 @@
 import android.os.Build;
 import android.os.Environment;
 import android.os.Process;
+import android.os.SystemProperties;
 import android.os.storage.StorageManager;
 import android.text.TextUtils;
 import android.util.ArrayMap;
@@ -723,6 +724,10 @@
             addFeature(PackageManager.FEATURE_RAM_NORMAL, 0);
         }
 
+        mUnavailableFeatures.add(PackageManager.FEATURE_NFC);

         for (String featureName : mUnavailableFeatures) {
             removeFeature(featureName);
         }

虽然config里面删除了,但是如果通过

NfcManager manager = (NfcManager) mContext.getSystemService(Context.NFC_SERVICE);

还是能获取NfcManager对象,但是调用都会报空指针,现象就是调用的app崩溃或者系统报异常。
所以还需要在系统服务注册的时候加一句判断:

Index: frameworks/base/core/java/android/app/SystemServiceRegistry.java
===================================================================
--- frameworks/base/core/java/android/app/SystemServiceRegistry.java	(版本 1475)
+++ frameworks/base/core/java/android/app/SystemServiceRegistry.java	(工作副本)
@@ -327,6 +327,9 @@
                 new CachedServiceFetcher<NfcManager>() {
             @Override
             public NfcManager createService(ContextImpl ctx) {
+                if (!ctx.getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC)) {
+                    return null;
+                }
                 return new NfcManager(ctx);
             }});
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值