利用TelephonyManager(电话管理器)类来去的手机通话状态、网络、位置、Sim卡等信息
2016-11-15 15:21
381 查看
TelephonyManager类作用;
代表手机各种状态的数组;
举例说明获取手机各种数据的实例
利用TelephonyManager和Service实现开机自动监听记录手机通话记录实例
——————-TelephonyManager类的作用———————-TelephonyManager 顾名思义,他是管理手机各种虚拟状态的类,他可以用来管理手机通话状态,电话网络服务器信息,SIM信息,本机手机版本等信息,只需要借助本类下面的方法就可以很方便的取值;
——————–代表手机各种状态的数组———————–
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="statusNames"> <item>设备编号</item> <item>软件版本</item> <item>网络运营商代号</item> <item>网络运营商名称</item> <item>手机制式</item> <item>设备当前位置</item> <item>SIM卡的国别</item> <item>SIM卡序列号</item> <item>SIM卡状态</item> </string-array> <string-array name="simState" > <item>状态未知</item> <item>无SIM卡</item> <item>被PIN加锁</item> <item>被PUK加锁</item> <item>被NetWork PIN加锁</item> <item>已准备好</item> </string-array> <string-array name="phoneType"> <item>未知</item> <item>GSM</item> <item>CDMA</item> </string-array> </resources>
——————–举例说明获取本机各种信息———————–
ListView listView; String[] statusNames; ArrayList<String> statusValues = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView = (ListView) findViewById(R.id.listView); // 获取TelephonyManager对象 TelephonyManager tManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); // 获取values文件下资源文件array.xml中的资源 statusNames = getResources().getStringArray(R.array.statusNames);// 获取各种状态名称的数组 // 获取各种代表SIM卡状态的数组 String[] simStatus = getResources().getStringArray(R.array.simState); // 获取代表网络类型的数组 String[] phoneType = getResources().getStringArray(R.array.phoneType); statusValues.add(tManager.getDeviceId());// 获取设备编号 statusValues.add(tManager.getDeviceSoftwareVersion() != null ? tManager .getDeviceSoftwareVersion() : "未知");// 获取系统平台版本 statusValues.add(tManager.getNetworkOperator());// 获取网络运行商代号 statusValues.add(tManager.getNetworkOperatorName());// 获取网络运行商名称 statusValues.add(phoneType[tManager.getPhoneType()]);// 获取手机的网络类型,这里 statusValues.add(tManager.getCellLocation() != null ? tManager .getCellLocation().toString() : "未知位置");// 获取手机所在的地址 statusValues.add(tManager.getSimCountryIso());// 获取SIM卡的国别 statusValues.add(tManager.getSimSerialNumber());// 获取SIM卡序列号 statusValues.add(simStatus[tManager.getSimState()]);// 获取SIM卡状态 ArrayList<Map<String, String>> status = new ArrayList<>(); for (int i = 0; i < statusValues.size(); i++) { Map<String, String> map = new HashMap<>(); map.put("name", statusNames[i]); map.put("values", statusValues.get(i)); status.add(map); } SimpleAdapter adapter = new SimpleAdapter(this, status, R.layout.line, new String[] { "name", "values" }, new int[] { R.id.name, R.id.values }); listView.setAdapter(adapter); }
备注:通过这个实例,可以很清晰的了解TelephonyManager类的一些常用用法,还有回顾了SimpleAdapter类的用法。
最后加上手机位置访问权限和手机状态访问权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
为了把本实例演示完成,还需要下面的xml文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <TextView android:id="@+id/name" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> <TextView android:id="@+id/values" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> </LinearLayout>
———–利用TelephonyManager和Service实现开机自动监听记录手机通话记录实例——————
AutoService权限和注册receiver:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <receiver android:name=".AutoService" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>
AutoService.class代码:
package com.example.telephonymanager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class AutoService extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent receiverIntent = new Intent(context,TelephonyManagerService.class); context.startService(receiverIntent); } }
TelephonyManagerService.class页面代码:
package com.example.telephonymanager; import java.io.FileNotFoundException; import java.io.OutputStream; import java.io.PrintStream; import java.util.Date; import android.app.Service; import android.content.Context; import android.content.Intent; import android.os.IBinder; import androi ac65 d.telephony.PhoneStateListener; import android.telephony.TelephonyManager; public class TelephonyManagerService extends Service { TelephonyManager tManager; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); tManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); PhoneStateListener listener = new PhoneStateListener() { @Override public void onCallStateChanged(int state, String number) {// 字面理解当电话状态改变的时候触发此方法 switch (state) { case TelephonyManager.CALL_STATE_IDLE: break; case TelephonyManager.CALL_STATE_OFFHOOK: break; case TelephonyManager.CALL_STATE_RINGING: OutputStream os = null; try{ os= openFileOutput("phoneList",MODE_APPEND); }catch(FileNotFoundException e){ e.printStackTrace(); } PrintStream ps = new PrintStream(os); ps.println(new Date()+"来电"+number); ps.close(); break; default: break; } super.onCallStateChanged(state, number); } }; tManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); } }
OK,没有了解的同学,通过这个实例就知道怎么用了。
相关文章推荐
- TelephonyManager是一个管理手机通话状态,电话网络信息的服务类
- 取得电信网络和手机的相关信息之TelephonyManager与android.provider.settings.System
- 取得电信网络和手机的相关信息之TelephonyManager与android.provider.settings.System
- Android:TelephonyManager中有关的手机手机制式和移动网络类型
- Android 工具类 —— 判断网络连接状态、GPS是否打开、基站信息和手机IMSI码
- Android 获取手机设备信息、网络信息、SIM卡信息
- AFNetworkReachabilityManager监听手机网络状态的变化
- 通过TelephonyManager获取本地手机信息
- Android 获取手机网络、SIM卡等信息
- 手机信息的获取(手机IMEI,手机sim卡的IMSI,网络类型(WiFi,LTE(即4G)等),信号强度(蜂窝网络非WiFi),经纬度)
- 通过手机屏幕窥得他人的世界:MIT媒体实验室推出iOS应用,利用地理位置信息让两个陌生人在20天内了解相互的生活,而后便说再见
- 监听手机状态 网络,电话,位置等等~
- 星巴克利用地理位置应用发布咖啡速递手机应用
- android之TelephonyManager电话相关信息管理类解析
- 利用Python发送天气预报信息到手机
- 利用請求状态来提示信息
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第十七节 设置TCP连接状态
- 获取Android手机中SIM卡状态
- 利用EVEREST Corporate Edition网络统计硬件配置信息 推荐
- 当您尝试加入域时,出现“Network Location Cannot be Reached”(不能访问网络位置)错误信息