2012-09-20 187 views
1

我试图让使用下面的代码的电话号码,Android的 - 没有得到电话号码

TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
phoneImei = tm.getDeviceId(); 
phoneNo = tm.getLine1Number(); 

但是,它返回我空值。当我检查设置时,电话号码是未知的。我正在使用星系连结。任何想法如何我可以解决这个问题。?

回答

10

试试这个:

import android.app.Activity; 
    import android.content.Context; 
    import android.os.Bundle; 
    import android.telephony.TelephonyManager; 
    import android.util.Log; 
    import android.widget.Toast; 

    public class GetMyPhoneNoActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main);   

    String number =getMyPhoneNO(); 
    Toast.makeText(getApplicationContext(), "My Phone No is: " 
    +number, Toast.LENGTH_SHORT).show(); 
    Log.v("Debug", number);   
    } 

private String getMyPhoneNO(){ 
    TelephonyManager mTelephonyMgr;  
    mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);  

    String yourNumber = mTelephonyMgr.getLine1Number(); 
//return yourNumber; 
}  

}

您清单:

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

这会工作得很好。

+0

不能看到任何不同于我的代码..你仍然使用getLine1Number()... –

+0

但它在我的模拟器上正常工作.. –

+0

尝试使用手机而不是模拟器...把SIM放在手机上,并尝试.. –

1

您需要在您的AndroidManifest.xml文件

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

是的...我已经给予许可。但它仍然相同... –

+0

你的设备中有SIM吗? – Lucifer

+0

是的..我试了2个SIM卡..给我空值... –

3

这里是我的代码添加以下权限:

import java.lang.reflect.Method; 

import android.app.NotificationManager; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.database.Cursor; 
import android.media.AudioManager; 
import android.os.Bundle; 
import android.telephony.TelephonyManager; 

import com.android.internal.telephony.ITelephony; 

    public class BlockBlackListIncomingNumber extends BroadcastReceiver { 
private Context cont; 
private Transactions transactions; 
private ITelephony itelephony;; 

int i = 1; 


    /* When any incoming calls come to our cellphone number */ 
@Override 
public void onReceive(Context context, Intent intent) 
      { 
    transactions = new Transactions(context); 
       // Create an object of transaction class. 
    this.cont = context; 
       // Refer to current object of Context. 
    Bundle extras = intent.getExtras(); 
       // Getting Bundles in extras. 
    String iNumber = extras.getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 
       // Getting Incoming Number by which call comes that’s why we used TelephoyManager.EXTRA_INCOMING_NUMBER. 

i编号将来电号码。

0

尝试使用实施AIDL

+0

这将适用于所有版本的Android?这是SDK的一部分吗? – wojciii

+0

我想是的,我已经在Android 2.2上实现了它。请测试最新版本,并让我们知道您的发现。 – yogeshhkumarr

+0

我不认为你是对的。请参阅http://stackoverflow.com/a/9034931/1525300。 – wojciii

4

代替电话号码使用的SIM卡序列号,它总是存在,始终是一个有效值ITelephony接口。

telephonyManager.getSimSerialNumber(); 

SIM序列号在操作员中至少是唯一的。因此,与

telephonyManager.getNetworkOperator(); 

结合你就会有一个country.This内的用户的唯一标识符与

telephonyManager.getNetworkCountryIso(); 

结合你就会有一个用户的全局唯一标识符。

希望这会有所帮助。

干杯。

+0

添加3个不同答案的原因是什么? – Lucifer

+0

你的回答非常有用,但不是他所问的。 ;) – wojciii

0

在一些国家使用 代码

TelephonyManager TM =(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE),你不会得到的电话号码; phoneImei = tm.getDeviceId(); phoneNo = tm.getLine1Number();

你将不得不从用户那里得到它的输入。但是,要验证该号码,您需要在清单文件中包含发送SMS和接收SMS权限。

使用发件人和收件人的号码和加密的邮件(您编写/编码的)进行验证,您可以验证用户的电话号码。 Whatsapp这样做。