PickContact需要android.permission.READ_CONTACTS或grantUriPermission()

PickContact需要android.permission.READ_CONTACTS或grantUriPermission(),android,cordova,android-contacts,securityexception,android-securityexception,Android,Cordova,Android Contacts,Securityexception,Android Securityexception,首先是一些信息: 我首先在Cordova中创建了这个应用程序:看到了吗 现在我使用Android Studio Builder创建了一个本地Android应用程序,它也有同样的错误 我正在使用Android 6.0(SDK 23) 根据文档,ContactPick不需要权限: (但我还是宣布了这一点) 我有许多关于权限/请求电话信息的变体。当我试图得到这个号码时,它几乎失败了。。(我成功地获得了一次用户名) 有什么想法吗?它也在我的Cordova应用程序中(我以前以为是Cordova),但现在它

首先是一些信息:

我首先在Cordova中创建了这个应用程序:看到了吗

现在我使用Android Studio Builder创建了一个本地Android应用程序,它也有同样的错误

我正在使用Android 6.0(SDK 23)

根据文档,ContactPick不需要权限:

(但我还是宣布了这一点)

我有许多关于权限/请求电话信息的变体。当我试图得到这个号码时,它几乎失败了。。(我成功地获得了一次用户名)


有什么想法吗?它也在我的Cordova应用程序中(我以前以为是Cordova),但现在它也在原生Android中。我知道安卓6.0最近很新,但我在docs/stackoverflow中找不到任何东西。

答案介于两者之间。AndroidManifest.xml声明正确,但我的gradle构建设置将targetsdk版本更改为23。这将导致新的许可系统生效(请参见@)


我更改了gradle构建文件(在解包apk时检查了我的AndroidManifest之后)。现在它可以工作了

您的问题在于
getNumberContacts()
,而您的问题中所显示的源代码中没有。不,这可能是因为,我明天将对此进行调查:)并且它在传递结果信息失败时崩溃,因此由于某些原因它无法向我提供联系信息。这对我帮助很大。您找了多长时间了?:p只是预感需要一段时间:p
The result Intent delivered to your onActivityResult() callback contains the content: URI pointing to the selected contact. The response grants your app temporary permissions to read that contact using the Contacts Provider API even if your app does not include the READ_CONTACTS permission.
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="me.sapico.notify_arrival">
   <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="23" />
   <uses-permission-sdk-23 android:name="android.permission.READ_CONTACTS" />
   <uses-permission-sdk-23 android:name="android.permission.LOCATION_HARDWARE" />
   <uses-permission-sdk-23 android:name="android.permission.INTERNET" />
   <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme">
      <activity android:name=".MainActivity">
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
   </application>
</manifest>
listView1.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
    @Override
    public void onItemClick(AdapterView<?> adapter, View v, int position,
                            long arg3)
    {
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivityForResult(intent, REQUEST_SELECT_CONTACT);
        }
    }
});

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    //super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) {
        String phone = getNumberContacts(data);
        String t = "";
       /* Uri contactUri = data.getData();
        String[] projection = {};//ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.CONTACT_ID};
        Cursor cursor = getContentResolver().query(contactUri, projection,
                null, null, null);
        // If the cursor returned is valid, get the phone number
        if (cursor != null && cursor.moveToFirst()) {
            int numberIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
            String number = cursor.getString(numberIndex);
            // Do something with the phone number
            //...
        }*/
    }
}
11-05 01:47:17.008 26632-26688/me.sapico.notify_arrival E/Surface: getSlotFromBufferLocked: unknown buffer: 0xaefbd3e0
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime: FATAL EXCEPTION: main
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime: Process: me.sapico.notify_arrival, PID: 26632
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/258i49688c038aae982f.3789r2248-292F313F3943312F31533F4545/897 flg=0x1 }} to activity {me.sapico.notify_arrival/me.sapico.notify_arrival.MainActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/data/phones from pid=26632, uid=10149 requires android.permission.READ_CONTACTS, or grantUriPermission()
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.app.ActivityThread.deliverResults(ActivityThread.java:3699)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.app.ActivityThread.-wrap16(ActivityThread.java)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:148)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5417)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:  Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/data/phones from pid=26632, uid=10149 requires android.permission.READ_CONTACTS, or grantUriPermission()
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.os.Parcel.readException(Parcel.java:1599)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.content.ContentProviderProxy.query(ContentProviderNative.java:421)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.content.ContentResolver.query(ContentResolver.java:491)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.content.ContentResolver.query(ContentResolver.java:434)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at me.sapico.notify_arrival.MainActivity.getNumberContacts(MainActivity.java:200)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at me.sapico.notify_arrival.MainActivity.onActivityResult(MainActivity.java:175)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.app.Activity.dispatchActivityResult(Activity.java:6428)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.app.ActivityThread.deliverResults(ActivityThread.java:3695)
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.app.ActivityThread.-wrap16(ActivityThread.java) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:148) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5417) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
11-05 01:47:19.260 26632-26632/me.sapico.notify_arrival E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)