我正在尝试使用以下代码获取电话号码,
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
phoneImei = tm.getDeviceId();
phoneNo = tm.getLine1Number();
但是,它返回空值。当我检查设置时,电话号码是未知的。我正在使用银河系。知道我该如何解决这个问题。?
试试这个 :
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>
这会很好地工作。
使用 SIM 卡序列号代替电话号码,该序列号始终存在并且始终是有效值。
telephonyManager.getSimSerialNumber();
SIM 序列号至少在运营商内部是唯一的。所以结合
telephonyManager.getNetworkOperator();
您将拥有一个国家/地区内订阅者的唯一标识符。这与
telephonyManager.getNetworkCountryIso();
您将拥有订阅者的全球唯一标识符。
希望这会有所帮助。
干杯。
这是我的代码:
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.
iNumber 将是传入号码。
您需要在 AndroidManifest.xml 文件中添加以下权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
尝试使用 AIDL 实现 ITelephony 接口
在某些国家/地区,您不会使用您的代码获得电话号码
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); phoneImei = tm.getDeviceId(); phoneNo = tm.getLine1Number();
您必须从用户那里获得输入。但是,要验证该号码,您需要在清单文件中包含发送 SMS 和接收 SMS 权限。
使用发送者和接收者的号码以及加密消息(您编写/编码)进行验证,您可以验证用户的电话号码。Whatsapp 就是这样做的。
如果您没有获得行号,您可以使用此代码
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
List<SubscriptionInfo> _sb = SubscriptionManager.from(getApplicationContext()).getActiveSubscriptionInfoList();
for (int i = 1; i < _sb.size(); i++) {
SubscriptionInfo info = _sb.get(i);
Log.d("phone", "Mobile_number " + info.getNumber());
}
}