我试图在我的Android应用程序中从手机中读取联系人并将其显示在GridView中。我希望在点击ImageView时开始阅读联系人。这是代码:
img7.setOnClickListener(new OnClickListener() { // img7 is object of ImageView
@Override
public void onClick(View v) {
// startActivity(new Intent(Contacts.this, SyncContacts.class));
// fetchContacts();
Cursor cursor = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI,
null,
ContactsContract.Contacts.HAS_PHONE_NUMBER + " = 1",
null,
"UPPER(" + ContactsContract.Contacts.DISPLAY_NAME
+ ") ASC");
count = cursor.getCount();
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
String contact_id = cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts._ID));
String name = cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));
if (hasPhoneNumber > 0) {
array.add("" + name);
Cursor phoneCursor = getContentResolver()
.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = ?",
new String[] { contact_id }, null);
while (phoneCursor.moveToNext()) {
phoneNumber = phoneCursor.getString(phoneCursor
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
// array.add("" + phoneNumber);
}
phoneCursor.close();
db.insert(name, phoneNumber);
}
}
gv.setAdapter(new ListArray(Contacts.this, array, imageId));
Toast.makeText(getBaseContext(),
count + " contacts synced successfully",
Toast.LENGTH_LONG).show();
}
}
});
当点击ImageView时,我的应用程序崩溃,在Eclipse中显示以下异常。
09-07 16:55:16.058: E/AndroidRuntime(889): FATAL EXCEPTION: main
09-07 16:55:16.058: E/AndroidRuntime(889): java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/contacts from pid=889, uid=10044 requires android.permission.READ_CONTACTS, or grantUriPermission()
09-07 16:55:16.058: E/AndroidRuntime(889): at android.os.Parcel.readException(Parcel.java:1425)
09-07 16:55:16.058: E/AndroidRuntime(889): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:188)
09-07 16:55:16.058: E/AndroidRuntime(889): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
09-07 16:55:16.058: E/AndroidRuntime(889): at android.content.ContentProviderProxy.query(ContentProviderNative.java:366)
09-07 16:55:16.058: E/AndroidRuntime(889): at android.content.ContentResolver.query(ContentResolver.java:370)
09-07 16:55:16.058: E/AndroidRuntime(889): at android.content.ContentResolver.query(ContentResolver.java:313)
09-07 16:55:16.058: E/AndroidRuntime(889): at com.example.firstpage.Contacts$1.onClick(Contacts.java:48)
09-07 16:55:16.058: E/AndroidRuntime(889): at android.view.View.performClick(View.java:4084)
09-07 16:55:16.058: E/AndroidRuntime(889): at android.view.View$PerformClick.run(View.java:16966)
09-07 16:55:16.058: E/AndroidRuntime(889): at android.os.Handler.handleCallback(Handler.java:615)
09-07 16:55:16.058: E/AndroidRuntime(889): at android.os.Handler.dispatchMessage(Handler.java:92)
09-07 16:55:16.058: E/AndroidRuntime(889): at android.os.Looper.loop(Looper.java:137)
09-07 16:55:16.058: E/AndroidRuntime(889): at android.app.ActivityThread.main(ActivityThread.java:4745)
09-07 16:55:16.058: E/AndroidRuntime(889): at java.lang.reflect.Method.invokeNative(Native Method)
09-07 16:55:16.058: E/AndroidRuntime(889): at java.lang.reflect.Method.invoke(Method.java:511)
09-07 16:55:16.058: E/AndroidRuntime(889): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
09-07 16:55:16.058: E/AndroidRuntime(889): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-07 16:55:16.058: E/AndroidRuntime(889): at dalvik.system.NativeStart.main(Native Method)
当我点击此异常时(09-07 16:55:16.058:E / AndroidRuntime(889):在com.example.firstpage.Contacts $ 1.onClick(Contacts.java:48)),它指向< / p>
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, ContactsContract.Contacts.HAS_PHONE_NUMBER + " = 1", null,"UPPER(" + ContactsContract.Contacts.DISPLAY_NAME+ ") ASC");
有谁能告诉我为什么会出现这种异常以及如何纠正它?
答案 0 :(得分:0)
在清单文件中添加此权限:
<uses-permission android:name="android.permission.READ_CONTACTS"/>