【发布时间】:2016-01-02 09:51:08
【问题描述】:
我有具有清单权限的应用程序
<uses-permission android:name="android.permission.READ_CONTACTS" />
我的活动尝试加载联系人:
eDeviceRecordsLoader contactsLoader = new eDeviceRecordsLoader(this);
loaderActivity.getLoaderManager().initLoader(R.id.ab_control_device_records_loader, null, contactsLoader);
eDeviceRecordsLoader:
public class eDeviceRecordsLoader implements LoaderCallbacks<Cursor>
{
public eDeviceRecordsLoader(Context _context)
{
context = _context;
}
@Override
public Loader<Cursor> onCreateLoader(int _id, Bundle _args)
{
loaderId = _id;
return new CursorLoader(context,
ContactsContract.Contacts.CONTENT_URI,
PROJECTION,
SELECTION,
null,
null);
}
@Override
public void onLoadFinished(Loader<Cursor> _loader, Cursor _data)
{
if(_loader.getId() != loaderId) { return; }
if(_data.moveToFirst())
{
eDeviceRecords records = new eDeviceRecords();
do
{
String currentContactLookupKey = _data.getString(_data.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
long currentContactId = _data.getLong(_data.getColumnIndex(ContactsContract.Contacts._ID));
records.put(currentContactId, new eDeviceRecord(currentContactId, currentContactLookupKey));
}
while(_data.moveToNext());
//another work
}
}
protected static final String SELECTION = "(" + ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1" + ")";
protected static final String[] PROJECTION =
{
ContactsContract.Contacts._ID,
ContactsContract.Contacts.LOOKUP_KEY,
ContactsContract.Contacts.STARRED,
};
}
80% 的手机可以正常工作并加载联系人。但有些手机有额外的应用程序安全设置权限(版本 API
问题:我如何检查这个额外的权限并提醒用户授予他们?
【问题讨论】:
-
离题:你为什么要遍历
Cursor?为什么不使用SimpleCursorAdapter? -
我将所有联系人发送到额外处理 - 检查添加/删除联系人 - 然后显示
-
你确定
Cursor是空的吗?试过DatabaseUtils#dumpCursor()? -
如果没有空我这里没有发过
-
您是在问如何在运行时提示用户对 api 23 的权限?
标签: android settings contacts android-permissions android-cursorloader