在android中获取设备的电话号码
嘿,伙计们,我正在用android studio获取我手机的电话号码 我已在清单文件中输入权限,即在android中获取设备的电话号码,android,Android,嘿,伙计们,我正在用android studio获取我手机的电话号码 我已在清单文件中输入权限,即 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 但当我运行我的应用程序时,它崩溃了。我无法解决这个问题。 请帮帮我。谢谢 问题在于这句话 String m=tMgr.getLine1Number(); E/AndroidRuntime:致命异常:主 流程:com.example.umk.s
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
但当我运行我的应用程序时,它崩溃了。我无法解决这个问题。
请帮帮我。谢谢
问题在于这句话
String m=tMgr.getLine1Number();
E/AndroidRuntime:致命异常:主
流程:com.example.umk.stylefeedback,PID:32333
java.lang.RuntimeException:无法启动活动组件信息{com.example.umk.stylefeedback/com.example.umk.stylefeedback.NumberConfirmation}:java.lang.SecurityException:getLine1NumberForDisplay:用户10097和当前进程都没有android.permission.READ\u SMS。
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
位于android.app.ActivityThread.-wrap11(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:148)
位于android.app.ActivityThread.main(ActivityThread.java:5417)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:726)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
原因:java.lang.SecurityException:getLine1NumberForDisplay:用户10097和当前进程都没有android.permission.READ\u SMS。
在android.os.Parcel.readException(Parcel.java:1620)
位于android.os.Parcel.readException(Parcel.java:1573)
位于com.android.internal.telephony.ITelephony$Stub$Proxy.getLine1NumberForDisplay(ITelephony.java:3731)
在android.telephony.TelephonyManager.getLine1NumberForSubscriber(TelephonyManager.java:2101)中
位于android.telephony.TelephonyManager.getLine1Number(TelephonyManager.java:2079)
位于com.example.umk.stylefeedback.NumberConfirmation.onCreate(NumberConfirmation.java:35)
位于android.app.Activity.performCreate(Activity.java:6251)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
位于android.app.ActivityThread.-wrap11(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:148)
位于android.app.ActivityThread.main(ActivityThread.java:5417)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:726)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)Hello可以共享logcat 由于电话号码并非物理存储在所有SIM卡上,或从网络广播到手机,因此无法保证解决此问题。这在一些需要物理地址验证的国家尤其如此,数字分配只能在之后进行。电话号码分配在网络上进行,并且可以在不更改SIM卡或设备的情况下进行更改(例如,这就是支持移植的方式)
我知道这很痛苦,但最有可能的解决办法是让用户输入他/她的电话号码一次并存储 Hello可以共享logcat 没有瓜尔人
String m=tMgr.getLine1Number();
public void fetchContacts() {
////Log.e("step ", "1");
String phoneNumber, phonetype = null;
Uri CONTENT_URI = ContactsContract.Contacts.CONTENT_URI;
String _ID = ContactsContract.Contacts._ID;
String DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME;
String HAS_PHONE_NUMBER = ContactsContract.Contacts.HAS_PHONE_NUMBER;
Uri PhoneCONTENT_URI = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String Phone_CONTACT_ID = ContactsContract.CommonDataKinds.Phone.CONTACT_ID;
String NUMBER = ContactsContract.CommonDataKinds.Phone.NUMBER;
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(CONTENT_URI, null, null, null, null);
// Loop for every contact in the phone
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
String contact_id = cursor.getString(cursor.getColumnIndex(_ID));
String name = cursor.getString(cursor.getColumnIndex(DISPLAY_NAME));
int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(HAS_PHONE_NUMBER)));
if (hasPhoneNumber > 0) {
Cursor phoneCursor = contentResolver.query(PhoneCONTENT_URI, null, Phone_CONTACT_ID + " = ?"
, new String[]{contact_id}, DISPLAY_NAME);
while (phoneCursor.moveToNext()) {
phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(NUMBER));
String string = phoneNumber.replaceAll("[^\\d]", "");
// String where2 = childJSONObject.getString("phone_number");
if (string.length() > 10)
string = string.substring(string.length() - 10);
JSONObject object = new JSONObject();
if (ValidationUtil.isValidMobileNumber(string)) {
if (string.length() > 2) {
try {
object.put("name", helper.ConvertCamel(name));
object.put("phone", Long.parseLong(string.trim()));
objects.add(object);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
phoneCursor.close();
}
}
cursor.close();
}
}
}