联系人CursorLoader返回空结果

时间:2015-12-24 15:08:38

标签: android settings contacts android-permissions android-cursorloader

我有明确许可的申请

    <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没有访问权限,光标始终为空。

问题:如何检查此附加权限并提醒用户授予他们?

1 个答案:

答案 0 :(得分:1)

此时不知道设备发生了什么,我建议接受评论的建议并确保代码中没有缺陷,之后;您可以放入某种锁屏监听器并像这样处理您的应用程序,这样就会显示一条消息,如果您在屏幕锁定时无法发送祝酒词,则在锁定时记录并在此之前显示警告,或者你可以在第一次使用应用程序时或每次应用程序启动时发出警告(对用户来说很烦人)。

在决定如何提醒用户时,它将取决于您希望如何积极地做到这一点。

你可以:

  1. 首次启动应用程序时,Put是一个启动画面,通知用户可能发生的引脚限制。
  2. 创建一个警告,警告可能需要一个引脚。
  3. 创建一个用户必须关闭的对话框,以确保用户交互,从而确认。
  4. 不是你想要的理想解决方案我害怕。

相关问题