Android SIM卡 插拔监听
2023-02-18 16:34:07 时间
记录一下
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
/**
* 监听sim状态改变的广播,返回sim卡的状态, 有效或者无效。
* 双卡中只要有一张卡的状态有效即返回状态为有效,两张卡都无效则返回无效。
*/
public class SimStateReceiver extends BroadcastReceiver {
public final static String ACTION_SIM_STATE_CHANGED = "android.intent.action.SIM_STATE_CHANGED";
private OnSimChangeListener onSimSwitchListener;
@Override
public void onReceive(Context context, Intent intent) {
if (ACTION_SIM_STATE_CHANGED.equals(intent.getAction())) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);
int state = tm.getSimState();
if (onSimSwitchListener != null) {
onSimSwitchListener.simValid(state == TelephonyManager.SIM_STATE_READY);
}
}
}
public void setOnSimSwitchListener(OnSimChangeListener onSimSwitchListener) {
this.onSimSwitchListener = onSimSwitchListener;
}
public interface OnSimChangeListener {
void simValid(boolean valid);
}
}
在Fragment or Activity 中使用:
/**
* sim 变化广播
*/
private SimStateReceiver simStateReceiver;
/**
* sim监听是否已注册
*/
private boolean hasRegister = false;
@Override
public void onStart() {
super.onStart();
registerSimReceiver(true);
}
@Override
public void onStop() {
super.onStop();
registerSimReceiver(false);
}
/**
* 监听sim卡状态
*/
public void registerSimReceiver(boolean register) {
if (register) {
if (simStateReceiver == null) {
simStateReceiver = new SimStateReceiver();
simStateReceiver.setOnSimSwitchListener(valid -> {
if (!valid ) {
// TODO: sim卡不可用
}
});
}
IntentFilter intentFilter = new IntentFilter(SimStateReceiver.ACTION_SIM_STATE_CHANGED);
if (!hasRegister) {
hasRegister= true;
context.registerReceiver(simStateReceiver, intentFilter);
}
} else {
if (simStateReceiver != null && hasRegister) {
hasRegister= false;
context.unregisterReceiver(simStateReceiver);
}
}
}
相关文章
- [PHP] laravel框架注意bootstrap/cache
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(35)-Fiddler如何抓取微信小程序的包-下篇
- 网站在线客服系统源码 | 全渠道在线客服代码下载 (最新版支持外贸商城/H5/小程序/公众号对接)
- 前端vue2+vue-router3+ElementUI+axios综合使用代码教程登录页案例
- 在线客服系统对接微信小程序(客服消息推送)
- 【小程序】同一微信号在微信开发工具上怎么切换小程序
- 【小程序】微信公众号模板消息跳转小程序发送失败:errcode=40013 , errmsg=invalid appid rid:
- 【小程序】微信小程序报错47001 - data format error hint
- 【小程序】微信小程序报错:用户绑定的手机需要进行验证,请在客户端完成短信验证
- 【小程序】微信小程序设置globalData全局数据
- 【小程序】获取手机号报错:getPhoneNumber:fail no permission
- 【小程序】小程序webview不支持打开非业务域名请重新配置
- 【uniapp】uniapp微信小程序开发:启动微信开发者工具提示no such file or directory错误
- 【小程序】uniapp发行微信小程序上传失败Error: Error: {"errCode":-10008,"errMsg":"invalid ip
- 【小程序】如何获取微信小程序代码上传密钥?
- [前端] 前端bootstrap col-xs-6 col-md-3的布局意思
- 解放重复劳动丨华为云IoT API Explorer对接小程序实现系统化应用
- [小程序] 支付宝小程序使用list时提示元素不存在
- [javascript] 支付宝小程序网络GET请求
- [PHP] laravel框架注意bootstrap/cache