2011-10-04 49 views
0

我的應用程序爲了提取電話號碼,我寫了下面的代碼。當我在模擬器中運行它時,一切都很好,但是當我在真實設備上運行它時,應用程序崩潰。你的建議是什麼?我在清單文件中添加了<uses-permission android:name="android.permission.READ_PHONE_STATE"/>Android,如何拿電話號碼?

public class TestActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
TextView phoneNumber = (TextView)findViewById(R.id.tvPhoneNumber); 
phoneNumber.setText(getMy10DigitPhoneNumber()); 
} 
private String getMyPhoneNumber(){ 
     TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
     return mTelephonyMgr.getLine1Number(); 
    } 

    private String getMy10DigitPhoneNumber(){ 
     String s = getMyPhoneNumber(); 
     return s.substring(2); 
    } 

} 
+0

當我這樣做時,模擬器和真實設備之間的數字是不同的。考慮刪除子字符串並看看你得到了什麼。 – Fosco

+1

「應用程序崩潰」 - 但您不認爲錯誤消息或堆棧跟蹤會對發佈有幫助嗎? :) – JesusFreke

+0

請發佈您的堆棧跟蹤 –

回答

2

getLine1Number()將返回電話號碼字符串(如果可用),如果不可用則返回null。所以你應該檢查空指針。

private String getMy10DigitPhoneNumber() { 
     String s = getMyPhoneNumber(); 
     if(s == null) return ""; 
     else return s.substring(2); 
} 

還檢查由getLine1Number()返回的字符串的長度。在我的手機中,我收到了一個""字符串。在這種情況下,substring()將拋出IndexOutOfBoundsException。因此,在調用substring()之前,請檢查s的長度。

+0

你是偉大的人。問題是因爲字符串的長度。我刪除子串克勞斯,它工作正常:)但我沒有采取電話號碼,只是「」。 :( – Hesam

+0

@Hesam,謝謝。順便說一句,你可以在手機上查看設置 - >關於手機 - >狀態 - >我的電話號碼,這個號碼由getLine1Number()返回,如果是_Unknown_,那麼getLint1Number()會返回null或「」。 它看起來像是操作員/ SIM卡。 – Karthik

+0

是的,你100%是正確的。我的是「未知」:( – Hesam