TelephonyManager学习之一,获取网络状态,SIM卡信息和监听手机来电

              JAVA代码:

                ListView  lv=(ListView) findViewById(R.id.lv);
		TelephonyManager tm=(TelephonyManager) getSystemService(TELEPHONY_SERVICE);
		String[] statusname=getResources().getStringArray(R.array.statusName);
		statusvalues.add(tm.getDeviceId());//获取设备编号。
		statusvalues.add(tm.getDeviceSoftwareVersion()!=null?tm.getDeviceSoftwareVersion():"未知");//获取系统平台版本
		statusvalues.add(tm.getNetworkOperator());//获取网络运营商代码
		statusvalues.add(tm.getNetworkOperatorName());//获取网络运营商名称
		statusvalues.add(tm.getPhoneType()+"");//获取手机网络类型
		statusvalues.add(tm.getCellLocation()!=null?tm.getCellLocation()+"":"未知");//获取设备所在位置
		statusvalues.add(tm.getSimCountryIso());//获取SIM卡国别
		statusvalues.add(tm.getSimSerialNumber());//获取SIM卡序列号
		statusvalues.add(tm.getSimState()+"");//获取SIM卡的状态
		ArrayList<Map<String,String>>data=new ArrayList<Map<String,String>>();
			for (int i = 0; i < statusvalues.size(); i++) {
				HashMap<String, String> map=new HashMap<String, String>();
				map.put("name", statusname[i]);
				map.put("Value", statusvalues.get(i));
				data.add(map);
			}
		SimpleAdapter adapter=new SimpleAdapter(this, data,R.layout.list, new String[]{"name","Value"},new int[]{R.id.name,R.id.value});
		lv.setAdapter(adapter);
		/**
		 * 监听手机来电
		 */
		PhoneStateListener psl=new PhoneStateListener(){

			@Override
			public void onCallStateChanged(int state, String incomingNumber) {
				super.onCallStateChanged(state, incomingNumber);
				switch(state){
				//无任何状态
				case TelephonyManager.CALL_STATE_IDLE:break;
				case TelephonyManager.CALL_STATE_OFFHOOK:break;
				//来电铃响时
				case TelephonyManager.CALL_STATE_RINGING:
			
					Toast.makeText(MainActivity.this,new Date()+"电话号码"+incomingNumber , 0).show();
					
					break;
				}
			
			}
		
		
		};
		//监听电话通话状态的改变
		tm.listen(psl, PhoneStateListener.LISTEN_CALL_STATE);
其中 :R.array.statusName可以在res/values的strings.xml文件中创建

  <string-array name="statusName">
        <item>设备编号</item>
        <item>系统平台版本</item>
        <item>网络运营商代码</item>
        <item>网络运营商名称</item>
        <item>手机网络类型</item>
        <item>设备所在位置</item>
        <item>获取SIM卡国别</item>
        <item>获取SIM卡序列号</item>
        <item>获取SIM卡的状态</item>
    </string-array>
其他两个layout文件中:一个是主layout里面放个<ListView/>就可以了,第二个是ListView自定义样式,自己定义。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
监听 Android 设备的 SIM状态,可以使用 `PhoneStateListener` 类。以下是一个示例代码: ```java import android.content.Context; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.util.Log; public class SimStateReceiver { private static final String TAG = "SimStateReceiver"; private Context mContext; private TelephonyManager mTelephonyManager; private PhoneStateListener mPhoneStateListener; public SimStateReceiver(Context context) { mContext = context; mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); mPhoneStateListener = new PhoneStateListener() { @Override public void onCallStateChanged(int state, String phoneNumber) { super.onCallStateChanged(state, phoneNumber); Log.d(TAG, "onCallStateChanged: state = " + state + ", phoneNumber = " + phoneNumber); } @Override public void onServiceStateChanged(ServiceState serviceState) { super.onServiceStateChanged(serviceState); Log.d(TAG, "onServiceStateChanged: serviceState = " + serviceState); } @Override public void onSimStateChanged(int state) { super.onSimStateChanged(state); Log.d(TAG, "onSimStateChanged: state = " + state); switch (state) { case TelephonyManager.SIM_STATE_ABSENT: // SIM 卡不存在或未插入 break; case TelephonyManager.SIM_STATE_NETWORK_LOCKED: // SIM 卡已被网络锁定 break; case TelephonyManager.SIM_STATE_PIN_REQUIRED: // SIM 卡需要 PIN 解锁 break; case TelephonyManager.SIM_STATE_PUK_REQUIRED: // SIM 卡需要 PUK 解锁 break; case TelephonyManager.SIM_STATE_READY: // SIM 卡已准备好 break; case TelephonyManager.SIM_STATE_UNKNOWN: // SIM状态未知 break; } } }; } public void start() { mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE | PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_SIM_STATE); } public void stop() { mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); } } ``` 在上面的代码中,我们创建了一个 `SimStateReceiver` 类,它有一个 `start()` 方法和一个 `stop()` 方法,用于开始和停止监听 SIM状态。在 `SimStateReceiver` 的构造方法中,我们创建了一个 `PhoneStateListener` 对象,并重写了其中的 `onSimStateChanged()` 方法,用于监听 SIM状态的变化。在 `onSimStateChanged()` 方法中,我们根据不同的 SIM状态打印不同的日志信息。最后,在 `start()` 方法中,我们通过 `TelephonyManager` 的 `listen()` 方法注册了 `PhoneStateListener` 对象,开始监听 SIM状态。在 `stop()` 方法中,我们通过 `TelephonyManager` 的 `listen()` 方法取消了 `PhoneStateListener` 对象的注册,停止监听 SIM状态

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值