Android获取手机设备识别码(IMEI)和手机号码

来源:互联网 发布:华夏名网域名注册 编辑:程序博客网 时间:2024/05/29 16:59

最近看了下获取手机设备ID和手机信息以及SIM的信息例子,主要还是借鉴别人的,现在自己写一下,算是巩固加深了,也希望能给大家一个参考

必要的条件还是一部真机,SIM卡或者UIM卡。

首先,在AndroidMainfest.xml里获取权限

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>。

其次,新建一个工具类PhoneInfo.java,主要用来获取手机设备信息(附上源码):

 

package com.wx.deviceid;import android.content.Context;import android.telephony.TelephonyManager;public class PhoneInfo {    private TelephonyManager telephonemanager;    private String IMSI;    private Context ctx;    /**     * 获取手机国际识别码IMEI     * */    public  PhoneInfo(Context context){        ctx=context;        telephonemanager=(TelephonyManager)context                .getSystemService(Context.TELEPHONY_SERVICE);    }        /**     * 获取手机号码      * */    public String getNativePhoneNumber(){              String nativephonenumber=null;       nativephonenumber=telephonemanager.getLine1Number();               return nativephonenumber;            }        /**     * 获取手机服务商信息     *       * */    public String  getProvidersName(){        String providerName=null;        try{            IMSI=telephonemanager.getSubscriberId();            //IMSI前面三位460是国家号码,其次的两位是运营商代号,00、02是中国移动,01是联通,03是电信。            System.out.print("IMSI是:"+IMSI);            if(IMSI.startsWith("46000")||IMSI.startsWith("46002")){                providerName="中国移动";            }else if(IMSI.startsWith("46001")){                providerName="中国联通";            }else if(IMSI.startsWith("46003")){                providerName="中国电信";        }                    }catch(Exception e){            e.printStackTrace();        }        return providerName; }    /**     * 获取手机信息     * */    public String getPhoneInfo(){               TelephonyManager tm=(TelephonyManager)ctx.getSystemService(Context.TELEPHONY_SERVICE);        StringBuilder sb=new StringBuilder();            sb.append("\nDeviceID(IMEI)"+tm.getDeviceId());        sb.append("\nDeviceSoftwareVersion:"+tm.getDeviceSoftwareVersion());        sb.append("\ngetLine1Number:"+tm.getLine1Number());        sb.append("\nNetworkCountryIso:"+tm.getNetworkCountryIso());        sb.append("\nNetworkOperator:"+tm.getNetworkOperator());        sb.append("\nNetworkOperatorName:"+tm.getNetworkOperatorName());        sb.append("\nNetworkType:"+tm.getNetworkType());        sb.append("\nPhoneType:"+tm.getPhoneType());        sb.append("\nSimCountryIso:"+tm.getSimCountryIso());        sb.append("\nSimOperator:"+tm.getSimOperator());        sb.append("\nSimOperatorName:"+tm.getSimOperatorName());        sb.append("\nSimSerialNumber:"+tm.getSimSerialNumber());        sb.append("\ngetSimState:"+tm.getSimState());        sb.append("\nSubscriberId:"+tm.getSubscriberId());        sb.append("\nVoiceMailNumber:"+tm.getVoiceMailNumber());             return sb.toString();                    }            }

然后,再在启动的PhoneActivity中,添加调用代码:

package com.wx.deviceid;/** *  获取手机设备测试信息 * @author wangxiang *  2013-9-17 * */import android.os.Bundle;import android.app.Activity;import android.view.Menu;public class PhoneActivity extends Activity {        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_phone);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.phone, menu);        PhoneInfo siminfo=new PhoneInfo(PhoneActivity.this);                System.out.println("\ngetprovider:"+siminfo.getProvidersName());        System.out.println("\ngeNativePhoneNumber:"+siminfo.getNativePhoneNumber());        System.out.println("--------w---x---------");        System.out.println("\ngetphoneinfo:"+siminfo.getPhoneInfo());         return true;    }}

第四,完成以上两步就可以在真机上运行了,为了查看输出信息的方便,可以在logcat中,单独查看System.out的信息,

       方法是点击那个绿色的“+”,如图:

然后在弹出框中的Filter name 和 By log tag里面均填入System.out。

好了,现在可以运行项目了,查看一下logcat结果:

09-17 17:42:49.924: I/System.out(2854): IMSI是:460023217433621
09-17 17:42:49.925: I/System.out(2854): getprovider:中国移动
09-17 17:42:49.931: I/System.out(2854): geNativePhoneNumber:
09-17 17:42:49.932: I/System.out(2854): --------w---x---------
09-17 17:42:49.970: I/System.out(2854): getphoneinfo:
09-17 17:42:49.970: I/System.out(2854): DeviceID(IMEI)863581011235194
09-17 17:42:49.970: I/System.out(2854): DeviceSoftwareVersion:78
09-17 17:42:49.971: I/System.out(2854): getLine1Number:
09-17 17:42:49.971: I/System.out(2854): NetworkCountryIso:cn
09-17 17:42:49.972: I/System.out(2854): NetworkOperator:46000
09-17 17:42:49.972: I/System.out(2854): NetworkOperatorName:中国移动
09-17 17:42:49.972: I/System.out(2854): NetworkType:2
09-17 17:42:49.972: I/System.out(2854): PhoneType:1
09-17 17:42:49.972: I/System.out(2854): SimCountryIso:cn
09-17 17:42:49.972: I/System.out(2854): SimOperator:46002
09-17 17:42:49.972: I/System.out(2854): SimOperatorName:
09-17 17:42:49.977: I/System.out(2854): SimSerialNumber:89860022091387006821
09-17 17:42:49.978: I/System.out(2854): getSimState:5
09-17 17:42:49.978: I/System.out(2854): SubscriberId:460023217433621
09-17 17:42:49.979: I/System.out(2854): VoiceMailNumber:null

 

其中geNativePhoneNumber的值为空,因为我的手机卡是动感地带的卡,所以无法获取,

这一点可以参考我的上一篇随笔:Android手机号码不是所有的都能获取;

另外我用联通的号码测试了一下,是可以获得号码的。

最后再补充一下以上信息的具体含义:

getNativePhoneNumber获取的手机号

DeviceId(IMEI)手机 国际移动用户识别码

NetworkOperator 移动运营商编号

NetworkOperatorName 移动运营商名称

SimSerialNumber  SimOperator  SimCountryIso  SimSerialNumber  SubscriberId(IMSI)   关于手机SIM卡的一些详细信息。

0 0
原创粉丝点击