Android獲取手機設備識別碼(IMEI)和手機號碼


最近看了下獲取手機設備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卡的一些詳細信息。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM