我编写了一些代码来获取所有联系人,但忘记在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中发现了一个错误 - - !!
答案 0 :(得分:-1)
是的,如果您在代码中拥有grant uri权限,它将起作用。
grantUriPermission(getPackageName(),ContactsContract.Contacts.CONTENT_URI, Intent.FLAG_GRANT_READ_URI_PERMISSION);