【问题标题】:Contacts CursorLoader return empty result联系人 CursorLoader 返回空结果
【发布时间】: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


【解决方案1】:

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

在决定如何提醒用户时,这将取决于您希望这样做的积极程度。

你可以:

  1. Put 是应用程序首次启动时的初始屏幕,用于通知用户可能出现的 pin 限制。
  2. 创建一个 toast 并警告可能需要 pin。
  3. 创建一个用户必须关闭的对话框以确保用户交互,从而得到确认。

恐怕不是您正在寻找的理想解决方案。

【讨论】:

  • 感谢您的回答。但在我的情况下,联系人是在应用程序第一次启动时加载的(没有锁屏或其他)。只有一个权限(CONTACTS)被拒绝。我无法以编程方式解决电话簿为空或我没有权限并且应该向用户显示警报。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
相关资源
最近更新 更多