标签: android-contentresolver

如何按即将到来的生日顺序获取联系人?

我有代码来阅读联系方式和阅读生日.但是,如何按即将到来的生日顺序获取联系人列表?

对于标识的单个联系人id,我会得到如下详细信息和生日:

Cursor c = null;
  try {
   Uri uri = ContentUris.withAppendedId(
     ContactsContract.Contacts.CONTENT_URI, id);
   c = ctx.getContentResolver().query(uri, null, null, null, null);
   if (c != null) {
    if (c.moveToFirst()) {
     DatabaseUtils.cursorRowToContentValues(c, data);
    }

   }
   c.close();

   // read birthday
   c = ctx.getContentResolver()
     .query(
       Data.CONTENT_URI,
       new String[] { Event.DATA },
       Data.CONTACT_ID + "=" + id + " AND "
         + Data.MIMETYPE + "= '"
         + Event.CONTENT_ITEM_TYPE + "' AND "
         + Event.TYPE + "=" + Event.TYPE_BIRTHDAY,
       null, Data.DISPLAY_NAME);
   if (c != …
Run Code Online (Sandbox Code Playgroud)

java sqlite android android-contentresolver

7
推荐指数
1
解决办法
6149
查看次数

如何访问我在收件箱中收到的短信时间?

我可以从收件箱中读取消息: -

 Uri uriSMSURI = Uri.parse("content://sms/inbox");

 Cursor cur = getContentResolver().query(uriSMSURI, null, null, null, null);
Run Code Online (Sandbox Code Playgroud)

我从这里访问日期: -

   date = cur.getString(cur.getColumnIndexOrThrow("date"));
Run Code Online (Sandbox Code Playgroud)

但现在问题是它从收件箱中提供当前时间而不是消息时间.对不起编辑错误,任何想法将不胜感激.提前致谢!

time sms android date android-contentresolver

7
推荐指数
2
解决办法
9532
查看次数

ContentResolver用法

我是andriod domain的新手,正处于学习阶段.我收到了几个问题:

我们每个应用程序都有单个ContentResolver对象吗?它是单身对象吗?谁管理这个对象生命周期?如果它是单例,它如何处理查询ContentProvider的多个请求?

android-contentresolver

7
推荐指数
1
解决办法
4514
查看次数

在SyncAdapter中使用ContentResolver而不是ContentProviderClient

据我所知,在SyncService中定义的一个SyncAdapter仅限于接收一个要处理的ContentProvider权限.

但是,与此同时,它可以访问ContentResolver,它允许在其他ContentProviders上运行查询.如果需要开发人员为SyncAdapter提供单一内容权限,我无法理解这个特定的设计概念,尽管如此,她仍然能够在她有权访问的任何ContentProvider上做任何她想做的事情.我的问题是:忽略onPerformSync的参数有什么后果:字符串权限和ContentProviderClient提供程序以及纯ContentResolver?

我的应用程序(实际上是它的SyncService)的想法很简单:查询日历服务器(在我的情况下为OwnCloud)不仅可以获取事件(与com.android.calendar同步),还可以获取VTODOS,然后可以在各种任务管理应用程序之间分配,我可以获取源代码和/或ContentProviderContract.我还想到了我自己的"Hub"ContentProvider,它具有基本的VTODO/Task结构,并且是与服务器相比唯一的一个.它应该能够与任务管理应用程序的不同内容提供程序同步2路,然后它与服务器同步.

我已阅读使用ContentProviderClient和ContentResolver访问内容提供商,我想我理解其中的区别.我现在感到困惑的是为什么Android SDK中有如此强烈的建议在单个SyncAdapter中使用单个ContentProvider但你可以使用ContentResolver来绕过这个限制.

我花了一整天的时间来搞清楚这一点并在此问题上搜索了数百个SO/Google资源(其中一些是多次).我还看到了有关使用一个SyncAdapter来同步多个ContentProviders的问题,但没有一个答案与使用ContentResolver的建议相近.

android android-contentresolver android-contentprovider android-syncadapter

7
推荐指数
1
解决办法
961
查看次数

如何在android中的两个或多个应用程序之间安全地共享数据?

我正在为企业环境制作一个应用程序框架,它涉及来自设备内存的两个或多个应用程序之间的数据共享.这些数据需要存储在设备上,并且只能由少数应用程序访问(可以通过用于安装它们的证书来识别).此外,它需要以安全的方式存储,以便其他第三方应用程序无法访问.哪种方法是实现此功能的最佳方式?

我已经阅读了有关ContentProvidersContentResolvers的内容,根据我的理解,这只会促进此过程.数据的实际存储更重要.我还研究了Android 的Keychain API,它似乎最接近我需要实现的目标.

有没有办法将ContentProvidersContentResolvers与Keychain API 集成?这是正确的方法吗?如果没有,实现同样最佳方法是什么?此外,我还没有找到好的代码示例来完全理解Keychain API的功能.请帮忙!

编辑:
我也看过Keystore API.这内部使用Keychain API并在应用程序之间共享数据,应使用Keychain.虽然我无法找到有关如何使用Keychain API的相同或详细文档或API指南的代码示例.我正在寻找一个与iOS Keychain相当的android .

Android 5中也引入了称为托管配置文件的东西.这是实现我想做的正确方法吗?

android keychain android-contentresolver android-contentprovider android-security

7
推荐指数
1
解决办法
2570
查看次数

Android - 获取具有街道地址的联系人列表,但没有像Skype这样的低价值地址,其中地址只是一个城市和州

我有一个光标检索应用程序上有街道地址的所有联系人.然后将此光标传递到适配器.到现在为止还挺好.除了我还得到一堆只有州/国家信息的低价值联系人(主要来自Skype).是否有一种简单的方法来修改URI以跳过这些?

public Cursor getDirectoryList (CharSequence constraint)  {

        String[] selectionArguments = { "%"+constraint.toString()+"%" };
        String selection = ContactsContract.CommonDataKinds.StructuredPostal.DISPLAY_NAME + " like ?";

        Uri uri = ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI;
        String sortOrder = ContactsContract.CommonDataKinds.StructuredPostal.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
        Cursor cr = getContentResolver().query(uri, null, selection, selectionArguments, sortOrder);

        return cr;
    }
Run Code Online (Sandbox Code Playgroud)

android android-contentresolver street-address simplecursoradapter

7
推荐指数
1
解决办法
169
查看次数

Telephony.Sms.Inbox.PERSON使用已弃用的Contacts.People._ID

赏金奖励 - 奖金将奖励给从填充Telephony.Sms.Inbox.PERSON值到相关Contact仅使用ContractsContact表格的答案.


我正在申请中以标准方式阅读短信:

    final String[] projection = {Telephony.Sms.Inbox.BODY,
            Telephony.Sms.Inbox.ADDRESS,
            Telephony.Sms.Inbox.READ,
            Telephony.Sms.Inbox.DATE,
            Telephony.Sms.Inbox.PERSON};

    final Cursor cursor = ctx.getContentResolver().query(Telephony.Sms.Inbox.CONTENT_URI,
            projection, null, null, Telephony.Sms.Inbox.DEFAULT_SORT_ORDER);
Run Code Online (Sandbox Code Playgroud)

填充时,从索引返回Telephony.Sms.Inbox.PERSON的id与弃用的id相关,Contacts.People._ID可用于通过以下方式查询更多联系人信息:

    final String[] projection = {Contacts.People.DISPLAY_NAME};
    final String[] selectionArgs = {contactId};

    final Cursor cursor = ctx.getContentResolver().query(Contacts.People.CONTENT_URI,
            projection, Contacts.People._ID + " = ?", selectionArgs, null);
Run Code Online (Sandbox Code Playgroud)

为什么相对较新的Telephony API使用弃用表而不是ContactsContract

Telephony.Sms.Inbox.PERSON文档说明:

类型:INTEGER(对内容中的项目的引用://联系人/人)

我试过(但并不奇怪吗?)在任何ContactsContractid字段中找到id的映射都没有成功,所以我不得不使用弃用的API来解决我需要快速执行的查询.

这样的查询包括搜索特定联系人的消息,我只有这个名字.联系人可能有多个号码,这些号码的格式可能不正确,无法匹配Telephony.Sms.Inbox.ADDRESS条目......

从数字到联系人时,使用和ContactsContract.PhoneLookup解决方法不是世界末日,但我仍然觉得我必须在这里遗漏一些东西 …

java android android-contentresolver contactscontract

7
推荐指数
1
解决办法
582
查看次数

传递 Intent 返回的 Uri 时,ContentResolver 中的 Uri 不受支持

我有一个应用程序,用户可以通过选择一个文件或将选定目录中的所有文件添加到ListView. 添加单个文件时,一切都很好,但是对于目录,我得到了Unsupported Uri. 问题与权限无关:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.dibo.testapp, PID: 12226
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=65579, result=-1, data=Intent { dat=content://com.android.providers.downloads.documents/tree/raw:/storage/emulated/0/Download/2006 A Good Year flg=0xc3 }} to activity {com.example.dibo.testapp/com.example.dibo.testapp.MainActivity}: java.lang.UnsupportedOperationException: Unsupported Uri content://com.android.providers.downloads.documents/tree/raw%3A%2Fstorage%2Femulated%2F0%2FDownload%2F2006%20A%20Good%20Year
        at android.app.ActivityThread.deliverResults(ActivityThread.java:4360)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4402)
        at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.UnsupportedOperationException: Unsupported Uri content://com.android.providers.downloads.documents/tree/raw%3A%2Fstorage%2Femulated%2F0%2FDownload%2F2006%20A%20Good%20Year
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:167)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
        at android.content.ContentProviderProxy.query(ContentProviderNative.java:418)
        at android.content.ContentResolver.query(ContentResolver.java:802)
        at android.content.ContentResolver.query(ContentResolver.java:752)
        at …
Run Code Online (Sandbox Code Playgroud)

java android android-intent android-contentresolver

7
推荐指数
1
解决办法
1105
查看次数

如何从Android Q中的contentResolver.openFileDescriptor(Uri uri,String s)获取媒体项real_Path?

在API级别Q中不推荐使用MediaStore.MediaColumns.DATA常量。

应用程序可能没有文件系统权限来直接访问此路径。应用程序不应尝试直接打开此路径,而应使用ContentResolver#openFileDescriptor(Uri,String)获得访问权限。对于定位到Build.VERSION_CODES.Q或更高版本的应用,此值始终为NULL。

android file-descriptor mediastore android-contentresolver

7
推荐指数
1
解决办法
326
查看次数

在 Android 10 设备中找不到 java.lang.IllegalArgumentException Volume external_primary

崩溃:找不到 java.lang.IllegalArgumentException 卷 external_primary

从媒体商店查询曲目时,我在某些 Android 10 设备(其中大部分来自小米米 A2 Lite、摩托罗拉、HMD Global Nokia)中遇到此崩溃。

Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null);

我应该为 Android 10 设备传递不同的 URI 吗?(但是它在大多数设备中都可以正常工作)

堆栈跟踪 :

Caused by java.lang.IllegalArgumentException: Volume external_primary not found
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:170)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
at android.content.ContentProviderProxy.query(ContentProviderProxy.java:423)
at android.content.ContentResolver.query(ContentResolver.java:946)
at android.content.ContentResolver.query(ContentResolver.java:881)
at android.content.ContentResolver.query(ContentResolver.java:837)
at com.example.musicplayer.CursorFactory.getAllSongsCursor(CursorFactory.java:164)
Run Code Online (Sandbox Code Playgroud)

编辑:根据报告的这个问题,怀疑这可能是那些使用 Android 10 操作系统的设备中的 sdcard 问题。

android mediastore android-contentresolver android-sdcard android-10.0

7
推荐指数
2
解决办法
3273
查看次数