即使没有android.permission.READ_CONTACTS,为什么我能够检索我的联系人?

时间:2014-03-24 17:11:31

标签: java android permissions

我编写了一些代码来获取所有联系人,但忘记在AndroidManifest.xml中声明权限。

AndroidManifest.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ninja.mobilehelper" >
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.ninja.mobilehelper.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
</manifest>

Java代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Uri contactsUri= ContactsContract.Contacts.CONTENT_URI;
    String[] proj1=new String[]{ContactsContract.Contacts.DISPLAY_NAME,
            ContactsContract.Contacts.HAS_PHONE_NUMBER,
            ContactsContract.Contacts.LOOKUP_KEY};
    Cursor curContacts=getContentResolver().query(contactsUri,proj1, null, null, null);

    //declare a ArrayList object to store the data that will present to the user
    ArrayList<String> contactsList=new ArrayList<String>();
    String allPhoneNo="";
    if(curContacts.getCount()>0){
        while(curContacts.moveToNext()){
            // get all the phone numbers if exist
            if(curContacts.getInt(1)>0){
                allPhoneNo=getAllPhoneNumbers(curContacts.getString(2));
            }
            contactsList.add(curContacts.getString(0)+" , "+allPhoneNo);
            allPhoneNo="";
        }
    }

    // binding the data to ListView
    setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,        contactsList));
    ListView lv=getListView();
    lv.setTextFilterEnabled(true);

}

我的手机是Moto X,Android 4.4.2,使用IntelliJIdea。

Gradle builds.Android构建工具版本为'19 .0.3'。

似乎需要使用权限android:name =“android.permission.READ_CONTACTS”,但未经许可即可使用!为什么?!

有什么建议吗?

补充:这是我的错,我打开了预先申请,宣布了许可。太可悲了,似乎我在Android中发现了一个错误 - - !!

1 个答案:

答案 0 :(得分:-1)

是的,如果您在代码中拥有grant uri权限,它将起作用。

 grantUriPermission(getPackageName(),ContactsContract.Contacts.CONTENT_URI, Intent.FLAG_GRANT_READ_URI_PERMISSION);