Получить имя владельца устройства Android
Следующий код работает на эмуляторе, но не работает на Samsung Galaxy S III.
final String[] projection = new String[]
{ ContactsContract.Profile.DISPLAY_NAME };
String name = null;
final Uri dataUri = Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI, ContactsContract.Contacts.Data.CONTENT_DIRECTORY);
final ContentResolver contentResolver = getContentResolver();
final Cursor c = contentResolver.query(dataUri, projection, null, null, null);
try
{
if (c.moveToFirst())
{
name = c.getString(c.getColumnIndex(ContactsContract.Profile.DISPLAY_NAME));
}
}
finally
{
c.close();
}
System.out.println(name);
Вот исключение:
12-03 20:57:15.751: E/AndroidRuntime(28172): FATAL EXCEPTION: main
12-03 20:57:15.751: E/AndroidRuntime(28172): java.lang.RuntimeException: Unable to start activity ComponentInfo{ht.smca.flashligh/ht.smca.flashligh.MainActivity}: java.lang.NullPointerException
12-03 20:57:15.751: E/AndroidRuntime(28172): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
12-03 20:57:15.751: E/AndroidRuntime(28172): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
12-03 20:57:15.751: E/AndroidRuntime(28172): at android.app.ActivityThread.access$600(ActivityThread.java:140)
12-03 20:57:15.751: E/AndroidRuntime(28172): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
12-03 20:57:15.751: E/AndroidRuntime(28172): at android.os.Handler.dispatchMessage(Handler.java:99)
12-03 20:57:15.751: E/AndroidRuntime(28172): at android.os.Looper.loop(Looper.java:137)
12-03 20:57:15.751: E/AndroidRuntime(28172): at android.app.ActivityThread.main(ActivityThread.java:4898)
12-03 20:57:15.751: E/AndroidRuntime(28172): at java.lang.reflect.Method.invokeNative(Native Method)
12-03 20:57:15.751: E/AndroidRuntime(28172): at java.lang.reflect.Method.invoke(Method.java:511)
12-03 20:57:15.751: E/AndroidRuntime(28172): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
12-03 20:57:15.751: E/AndroidRuntime(28172): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
12-03 20:57:15.751: E/AndroidRuntime(28172): at dalvik.system.NativeStart.main(Native Method)
12-03 20:57:15.751: E/AndroidRuntime(28172): Caused by: java.lang.NullPointerException
12-03 20:57:15.751: E/AndroidRuntime(28172): at com.android.internal.os.LoggingPrintStream.println(LoggingPrintStream.java:298)
12-03 20:57:15.751: E/AndroidRuntime(28172): at ht.smca.flashligh.MainActivity.onCreate(MainActivity.java:68)
12-03 20:57:15.751: E/AndroidRuntime(28172): at android.app.Activity.performCreate(Activity.java:5206)
12-03 20:57:15.751: E/AndroidRuntime(28172): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
12-03 20:57:15.751: E/AndroidRuntime(28172): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
12-03 20:57:15.751: E/AndroidRuntime(28172): ... 11 more
Любые предложения? Я делаю это для учебных целей, т.е. Для семинара.
Ответы
Ответ 1
У вас есть исключение null-указателя java, поэтому имя равно null. Поместите файл system.out.println() в try, и у вас не будет этой ошибки. После получения имени я действительно не знаю - Clad
Не мой пост, но ваш ответ:
Получить имя устройства Android (для модели устройства Android мне плохо)
android.os.Build.MODEL;
Вот два способа сделать это:
Как получить имя пользователя Google на Android?
Как я могу получить имя (или полное имя) пользователя телефона?
Ответ 2
Это поможет вам получить имя владельца, хранящееся на устройстве:
Cursor c = getApplication().getContentResolver().query(ContactsContract.Profile.CONTENT_URI, null, null, null, null);
c.moveToFirst();
textView.setText(c.getString(c.getColumnIndex("display_name")));
c.close();
Убедитесь, что вы добавили это разрешение в манифест:
<uses-permission android:name="android.permission.READ_CONTACTS"/>
Ответ 3
ContentResolver cr=getContentResolver();
Cursor curser = cr.query(ContactsContract.Profile.CONTENT_URI, null, null, null, null);
if(curser.getCount()>0){
c.moveToFirst();
String name=curser.getString(curser.getColumnIndex(
ContactsContract.Profile.DISPLAY_NAME));
Toast.makeText(MainActivity.this, "name"+name, Toast.LENGTH_SHORT).show();
}
c.close();
Ответ 4
Этот код предоставит владельцу полную информацию
Попробуйте этот код:
public class EmailFetcher{
static String getName(Context context) {
Cursor CR = null;
CR = getOwner(context);
String id = "", name = "";
while (CR.moveToNext())
{
name = CR.getString(CR.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
}
return name;
}
static String getEmailId(Context context) {
Cursor CR = null;
CR = getOwner(context);
String id = "", email = "";
while (CR.moveToNext()) {
id = CR.getString(CR.getColumnIndex(ContactsContract.CommonDataKinds.Email.CONTACT_ID));
email = CR.getString(CR.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
}
return email;
}
static Cursor getOwner(Context context) {
String accountName = null;
Cursor emailCur = null;
AccountManager accountManager = AccountManager.get(context);
Account[] accounts = accountManager.getAccountsByType("com.google");
if (accounts[0].name != null) {
accountName = accounts[0].name;
String where = ContactsContract.CommonDataKinds.Email.DATA + " = ?";
ArrayList<String> what = new ArrayList<String>();
what.add(accountName);
Log.v("Got account", "Account " + accountName);
for (int i = 1; i < accounts.length; i++) {
where += " or " + ContactsContract.CommonDataKinds.Email.DATA + " = ?";
what.add(accounts[i].name);
Log.v("Got account", "Account " + accounts[i].name);
}
String[] whatarr = (String[])what.toArray(new String[what.size()]);
ContentResolver cr = context.getContentResolver();
emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, where, whatarr, null);
if (id != null) {
// get the phone number
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null);
while (pCur.moveToNext())
{
phone = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.v("Got contacts", "phone" + phone);
}
pCur.close();
}
}
return emailCur;
}
}