PickContact需要android.permission.READ_CONTACTS或grantUriPermission() [英] PickContact requires android.permission.READ_CONTACTS, or grantUriPermission()

查看:222
本文介绍了PickContact需要android.permission.READ_CONTACTS或grantUriPermission()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

先了解一些信息:

我首先在Cordova中创建了该应用程序:请参阅 Cordova权限需要android.permission.READ_CONTACTS或grantUriPermission()

I first created the app in Cordova: see Cordova permissions requires android.permission.READ_CONTACTS, or grantUriPermission()

现在,我使用Android Studio Builder将应用程序创建为本地Android应用程序,它具有相同的错误.

Now i created the app as a native Android app using Android Studio Builder, it has the same error.

我正在使用Android 6.0(SDK 23)

I'm using Android 6.0 ( SDK 23)

根据文档,ContactPick不需要权限: http ://developer.android.com/guide/components/intents-common.html#Contacts

According to the docs, ContactPick doesn't need permissions: http://developer.android.com/guide/components/intents-common.html#Contacts

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.

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

( but i declared it none the less)

<?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>

这是我的代码(使用ListView单击)

Here's my code ( it uses a click on ListView)

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) 

我在权限/请求电话信息方面有很多变体.当我尝试获取号码时,它通常会失败..(我成功获取用户名一次).

I have had many variants on the permissions / requesting phone information. It mostly fails when i try to get the number.. ( i succeeded once at getting the user name).

有什么想法吗?它也在我的Cordova应用程序中(我以前以为是Cordova),但现在它也在本机Android中.我知道Android 6.0是最新的,但我在docs/stackoverflow中找不到任何内容.

Any thoughts? It's also in my Cordova app ( i thought it was Cordova previously), but now it's also in native Android. I know Android 6.0 is recently new, but i can't find anything in the docs / stackoverflow.

推荐答案

答案在两者之间. AndroidManifest.xml的声明正确,但是我的gradle构建设置将targetsdk版本更改为23.这导致新的权限系统启动(请参阅@ http://inthecheesefactory.com/blog/things-you-need-to-know-about-android- m-permission-developer-edition/en )

The answer is somewhere in between. AndroidManifest.xml was declared correctly, but my gradle build settings changed the targetsdk version to 23. Which causes the new permission system to kick in ( see @ http://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en )

我更改了gradle构建文件(在检查了有关解压缩apk的AndroidManifest之后).现在就可以了!

I changed the gradle build file ( after checking my AndroidManifest on unpacking the apk). And it works now!

这篇关于PickContact需要android.permission.READ_CONTACTS或grantUriPermission()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆