android log.e 旧数据,Android Sim更改檢測,Log.e中的錯誤。

该代码示例展示了一个BootCompleteReceiver,它在设备启动完成后启动一个服务MyService。服务中获取并比较SIM卡序列号,如果序列号发生变化则记录日志。这可用于设备安全或SIM卡变更监测场景。

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

BootCompleteReceiver public class BootCompleteReceiver extends BroadcastReceiver {

Context context;

SharedPreferences settings;

public static final String PREFS_NAME = "MyPrefsFile";

@Override

public void onReceive(Context context, Intent intent) {

Intent service = new Intent(context, MyService.class);

context.startService(service);

}

}

爲MyService public class MyService extends Service {

String storedSimSerial;

String currentSimSerial;

@Override

public void onCreate() {

super.onCreate();

}

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();

TelephonyManager telephoneMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

storedSimSerial = telephoneMgr.getSimSerialNumber();

Log.e("SimSerial::",storedSimSerial);

TelephonyManager tmMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

currentSimSerial = tmMgr.getSimSerialNumber();

Log.e("Current Sim Serial::",currentSimSerial);

if(currentSimSerial==storedSimSerial)

{

Log.e("Sim Status","Sim no changed !!!");

}

else

Log.e("Sim Status","Sim changed !!!");

return Service.START_STICKY;

}

@Override

public void onDestroy() {

super.onDestroy();

Toast.makeText(this, "Service Destroy", Toast.LENGTH_LONG).show();

}

@Override

public IBinder onBind(Intent arg0) {

return null;

}

}

### 如何在 Android 上模拟 SIM 卡功能 在 Android 平台上,可以通过多种方法和技术手段来模拟 SIM 卡的行为或状态。以下是几种常见的技术方案及其具体实现: #### 1. **利用 `TelephonyManager` 和虚拟设备** 开发者可以借助 Android 的虚拟设备(如 Android Emulator),并通过设置特定参数来模拟不同的 SIM 状态。例如,在 Android 模拟器中,可以选择网络运营商、国家/地区以及信号强度等属性。 此外,还可以通过调用 `TelephonyManager` 来读取和更改某些与 SIM 卡相关的配置信息[^1]。需要注意的是,部分操作可能受到权限限制,尤其是针对真实硬件设备的操作。 ```java // 获取 TelephonyManager 实例 TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); // 设置或查询 SIM 卡的状态 String simState = telephonyManager.getSimState(); // 返回 SIM 卡状态字符串表示形式 if (simState.equals(TelephonyManager.SIM_STATE_ABSENT)) { Log.d("SIM_STATUS", "No SIM card is present."); } else if (simState.equals(TelephonyManager.SIM_STATE_READY)) { Log.d("SIM_STATUS", "SIM card is ready to use."); } ``` #### 2. **监听广播消息并伪造数据** 当 SIM 卡发生插拔事件时,系统会发出相应的广播通知 (`android.intent.action.SIM_STATE_CHANGED`)。开发者可以在应用层面上捕获这些广播,并根据需求伪造相关数据[^4]。 下面是一个简单的广播接收器示例代码片段: ```java public class SimStateChangedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if ("android.intent.action.SIM_STATE_CHANGED".equals(action)) { Bundle extras = intent.getExtras(); if (extras != null && "LOCKED".equals(extras.getString("ss"))) { Log.d("SIM_BROADCAST", "SIM Card locked due to PIN requirement"); } } } } ``` #### 3. **修改核心框架文件以支持自定义逻辑** 如果目标是深入定制 Android 系统本身,则可考虑调整源码中的关键组件,比如 `CarrierConfigManager.java` 和 `CellSignalStrengthLte.java` 文件的内容[^3]。通过对这两个类的功能扩展或者重写其默认行为,能够更灵活地控制 SIM 卡的表现特性。 修改后的效果通常体现在以下几个方面: - 更改信号等级映射关系; - 调整不同制式下的优先级策略; - 增强多卡协同工作的兼容性处理能力等等。 --- ### 注意事项 尽管上述方法提供了不同程度上的解决方案,但在实际部署过程中仍需注意以下几点: - 需要申请必要的运行时权限才能访问敏感资源。 - 对于生产环境而言,建议仅限内部测试用途而非正式发布版本采用此类做法。 - 不同厂商可能会对标准 API 进行二次封装甚至屏蔽掉一些接口选项,因此跨平台移植性较差。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值