我有明确许可的申请
<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&lt; 23),并且可以锁定应用程序访问权限(不断地或通过密码/密码或需要用户批准)以获取联系人和其他权限。清单中授予的权限,但app没有访问权限,光标始终为空。
问题:如何检查此附加权限并提醒用户授予他们?
答案 0 :(得分:1)
此时不知道设备发生了什么,我建议接受评论的建议并确保代码中没有缺陷,之后;您可以放入某种锁屏监听器并像这样处理您的应用程序,这样就会显示一条消息,如果您在屏幕锁定时无法发送祝酒词,则在锁定时记录并在此之前显示警告,或者你可以在第一次使用应用程序时或每次应用程序启动时发出警告(对用户来说很烦人)。
在决定如何提醒用户时,它将取决于您希望如何积极地做到这一点。
你可以:
不是你想要的理想解决方案我害怕。