标签: android-contentresolver

Android创建播放列表

有人知道如何在代码中向Android添加播放列表吗?

我有点必须将它插入到内容解析器中,但是我必须将歌曲ID放入或者是否必须将所有歌曲的数据放入?

我一直在寻找示例代码,但还没有找到.

编辑:在这里找到答案是我如何做到的:

  public static void addToPlaylist(ContentResolver resolver, int audioId) {

        String[] cols = new String[] {
                "count(*)"
        };
        Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", YOUR_PLAYLIST_ID);
        Cursor cur = resolver.query(uri, cols, null, null, null);
        cur.moveToFirst();
        final int base = cur.getInt(0);
        cur.close();
        ContentValues values = new ContentValues();
        values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, Integer.valueOf(base + audioId));
        values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, audioId);
        resolver.insert(uri, values);
    }

   public static void removeFromPlaylist(ContentResolver resolver, int audioId) {
       Log.v("made it to add",""+audioId);
        String[] cols = new String[] {
                "count(*)"
        };
        Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", YOUR_PLAYLIST_ID);
        Cursor …
Run Code Online (Sandbox Code Playgroud)

android android-contentresolver

12
推荐指数
1
解决办法
1万
查看次数

在自定义内容提供程序中调用delete方法

我正在学习Android,而且我遇到了一个涉及调用自定义内容提供商的问题.我一直在教学书中使用一个例子,虽然它描述了如何创建自定义提供者,但没有明确的例子如何调用其中的特定方法.我特别研究如何从自定义内容提供程序中删除单个记录.

以下是自定义内容提供程序(EarthquakeProvider.java)的代码:

@Override


public int delete(Uri uri, String where, String[] whereArgs) {
int count;

switch (uriMatcher.match(uri)) {
  case QUAKES:
    count = earthquakeDB.delete(EARTHQUAKE_TABLE, where, whereArgs);
    break;

  case QUAKE_ID:
    String segment = uri.getPathSegments().get(1);
    count = earthquakeDB.delete(EARTHQUAKE_TABLE, KEY_ID + "="
                                + segment
                                + (!TextUtils.isEmpty(where) ? " AND (" 
                                + where + ')' : ""), whereArgs);
    break;

  default: throw new IllegalArgumentException("Unsupported URI: " + uri);
}

getContext().getContentResolver().notifyChange(uri, null);
return count;


 }
Run Code Online (Sandbox Code Playgroud)

我试图从主活动中调用delete方法来删除单个条目,而不是整个数据库.我想对OnLongClickListener主活动中数组列表视图中显示的选定记录使用about a.

这是我迄今为止在这个方法的主要活动中提出的:

earthquakeListView.setOnItemLongClickListener(new OnItemLongClickListener() {

    @Override
    public boolean …
Run Code Online (Sandbox Code Playgroud)

android android-contentresolver android-contentprovider onlongclicklistener

12
推荐指数
1
解决办法
2万
查看次数

Android从收件箱中获取短信,优化了读取所有邮件并对其进行分组的方式

您好我正在实施一个短信应用程序,现在能够检索所有消息与他们各自的联系信息,如显示名称,照片uri ..并在一个自定义列表中显示它们在项目点击带您进行相应的讨论.在这里我的问题是同步所有这些消息的时间,

  1. 我需要优化这个时间.
  2. 每次我在讨论视图中发送新消息并返回到最近的聊天时,我只需要更新特定项目,而不是整个列表.

这是我的代码:

ReadSMS.java:

public class ReadSMS {

    ArrayList<HashMap<Contact, ArrayList<OneComment>>> recentChats;

    Application _context;

    public ReadSMS(Application context) {
        this._context = context;
        this.recentChats = ((ChatApplication) _context).getChats();
    }

    public ArrayList<HashMap<Contact, ArrayList<OneComment>>> getSMS() {

        // Init
        ArrayList<SmsMsg> smsMsgs = new ArrayList<SmsMsg>();
        TreeSet<Integer> threadIds = new TreeSet<Integer>();

        Uri mSmsinboxQueryUri = Uri.parse("content://sms");
        Cursor cursor = _context.getContentResolver().query(
                mSmsinboxQueryUri,
                new String[] { "_id", "thread_id", "address", "date", "body",
                        "type" }, null, null, null);

        String[] columns = new String[] { "address", "thread_id", "date",
                "body", "type" };
        if (cursor.getCount() …
Run Code Online (Sandbox Code Playgroud)

android android-contentresolver android-contentprovider android-contacts

12
推荐指数
2
解决办法
1万
查看次数

如何从URI加载Picasa图片?

我正在使用ACTION_PICK意图从图库中选择一个图像.一些专辑,如"帖子","个人资料照片"等,都标有Picasa图标.对于来自此类相册的图片,我得到一个类似于此的URI:

content://com.google.android.gallery3d.provider/picasa/item/5769844615871490082
Run Code Online (Sandbox Code Playgroud)

我可以使用ContentResolver并且BitmapFactory没有问题从这个URI加载图像:

final InputStream ist = context.getContentResolver().openInputStream(intent.getData());
final Bitmap bitmap = BitmapFactory.decodeStream(ist);
Run Code Online (Sandbox Code Playgroud)

但是在重新启动应用程序后,我无法使用存储的URI加载图像.我打电话的时候decodeStream()会得到这个:

03-11 12:34:56.502: A/libc(1172): Fatal signal 11 (SIGSEGV) at 0x00000408 (code=1), thread 1462 03-11 12:34:56.502:
    W/ActivityManager(478): Permission Denial: opening provider
    com.android.gallery3d.provider.GalleryProvider from
    ProcessRecord{41cdd220 1172:com.mycompany.myapp/u0a10085}
    (pid=1172, uid=10085) requires
    com.google.android.gallery3d.permission.GALLERY_PROVIDER or
    com.google.android.gallery3d.permission.GALLERY_PROVIDER
Run Code Online (Sandbox Code Playgroud)

我试着补充一下

<uses-permission android:name="com.google.android.gallery3d.permission.GALLERY_PROVIDER"/>
Run Code Online (Sandbox Code Playgroud)

清单文件,但它没有帮助.

我认为我的问题类似于这个,但没有解决方案,只有一个解决方法.是否可以请求访问存储的URI的权限?

android picasa android-intent android-contentresolver android-contentprovider

12
推荐指数
1
解决办法
3164
查看次数

Android获取所有联系人列表(姓名,电子邮件,电话)需要超过一分钟的约700个联系人

有没有办法缩短这个时间?我正在使用光标运行并获取姓名,电话号码和电子邮件

如果我从查询循环中删除电话号码查询,它将在3秒后结束

任何想法如何改进该查询?

也许我在查询中做错了什么?

(显然我正在做异步但仍然......用户已经很长时间不能等了)

希望有人可以分享他对此的看法

这是我的代码

ContentResolver cr = getContentResolver();
            Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
                    null, null, null, null);
            if (cur.getCount() > 0) {
                while (cur.moveToNext()) {
                    AddressBookEntity adr = new AddressBookEntity();
                    String id = cur.getString(cur
                            .getColumnIndex(ContactsContract.Contacts._ID));
                    String name = cur
                            .getString(cur
                                    .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                    adr.fullName = name;

                    Cursor emailCur = cr
                            .query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                                    null,
                                    ContactsContract.CommonDataKinds.Email.CONTACT_ID
                                            + " = ?", new String[] { id },
                                    null);
                    while (emailCur.moveToNext()) {
                        // This would allow you get several email addresses
                        // if the email addresses …
Run Code Online (Sandbox Code Playgroud)

android abaddressbook android-contentresolver

12
推荐指数
1
解决办法
5998
查看次数

SyncAdapter始终处于挂起状态

我目前正在开发一个Android应用程序,它依赖于SyncAdapter从服务器刷新其内容.我基本上遵循了这些说明:https://developer.android.com/training/sync-adapters/creating-sync-adapter.html

直到最近,这仍然很好.我知道这可能听起来很愚蠢,但老实说我不知道​​我是怎么搞砸的:(


设置

我有一个ContentProvider,因此SyncAdapter我想要同步的所有项目的一个和一个帐户.我使用整数标志来确定哪个项目必须同步:

public static final int EVENTS = 0x1;
public static final int NEWS = 0x2;
public static final int SUBSTITUTIONS = 0x4;
public static final int TEACHERS = 0x8;
public static final int ALL = 0xF;
Run Code Online (Sandbox Code Playgroud)

所以在我看来onPerformSync我有类似的东西:

ArrayList<ContentProviderOperation> batchList = new ArrayList<>();

int which = extras.getInt(SYNC.ARG, SYNC.ALL);
if((which & SYNC.NEWS) == SYNC.NEWS) { syncNews(provider, batchList, syncResult, 0, 1); }
if((which & SYNC.EVENTS) == SYNC.EVENTS) { syncEvents(provider, …
Run Code Online (Sandbox Code Playgroud)

android synchronization android-contentresolver android-syncadapter swiperefreshlayout

12
推荐指数
1
解决办法
1122
查看次数

SyncAdapter运行动画 - 如何知道SyncAdapter是否正在主动同步

我想在ActionBar中显示ProgressBar,而我的SyncAdapter正在主动与Web同步内容.

我已尝试将SyncStatusObserverContentProvider.addStatusChangeListener一起使用.但是,我无法检查SyncAdapter是否正在运行.我只能检查:

  1. SyncAdapter正在使用ContentResolver.isSyncPending挂起
  2. SyncAdapter正在等待或正在使用ContentResolver.isSyncActive正在工作

可以组合这些标志:!isSyncPending && isSyncActive这样就可以检查SyncAdapter是否正在正常工作,并且没有任何待处理的工作.但是,在某些情况下,SyncAdapter正在正常工作,并有第二个等待它的待处理请求.

看起来很简单,但我无法找到解决这个问题的方法.在SyncAdapter未运行时显示ProgressBar会让用户感觉同步非常慢.让它不显示ProgressBar会让用户认为没有任何事情发生.

代码中的上述解决方案如下所示.我们在activity.onResume中注册观察者:

 int mask = ContentResolver.SYNC_OBSERVER_TYPE_PENDING | ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE;
 syncHandle = ContentResolver.addStatusChangeListener(mask, syncObserver);
Run Code Online (Sandbox Code Playgroud)

syncObserver在这里定义为:

syncObserver = new SyncStatusObserver()
{
    @Override
    public void onStatusChanged(int which)
    {
        Account account = getSomeAccount();
        boolean syncActive = ContentResolver.isSyncActive(account, CONTENT_AUTHORITY);
        boolean syncPending = ContentResolver.isSyncPending(account, CONTENT_AUTHORITY);
        boolean isSynchronizing = syncActive && !syncPending;
        updateRefreshButtonState();
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-contentresolver android-syncadapter

11
推荐指数
1
解决办法
5165
查看次数

是否可以使用robolectric将测试双重替换MediaStore?

我有一个查询MediaStore图像的类.例如,我的代码看起来像someContentResolver.query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, ... ).我想测试一下,我对MediaStore的查询是正确的.

到目前为止,我在测试中所做的是:

ContentResolver resolver = new Activity().getContentResolver();
ContentValues values = new ContentValues();
values.put( MediaStore.Images.Media.DATA,
            "/fake/path/file1.jpg" );
values.put( MediaStore.Images.Media.DATE_ADDED,
            fakeTime.getTime() );
resolver.insert( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                 values );
Run Code Online (Sandbox Code Playgroud)

我将这个解析器注入到我的类中,该类对它执行查询.但是,查询返回null.我看到这篇文章:http: //ikaruga2.wordpress.com/2013/07/29/roboelectric-and-contentresolverscontentproviders/ 表示使用ShadowContentResolver注册内容提供者,所以,如下所示:

ShadowContentResolver.registerProvider( MediaStore.AUTHORITY, <SOMETHING_GOES_HERE> );
Run Code Online (Sandbox Code Playgroud)

但我不知道该为内容提供商提供什么.也许用一个MediaStore对象?不,它不是ContentProvider.也许是这样MediaProvider?由于某种原因,该符号无法解析.

在这一点上,我严重怀疑这是远程正确的方法.有人能引导我朝着正确的方向前进吗?

使用Robolectric 2.4快照和API 19.

android android-contentresolver android-contentprovider robolectric

11
推荐指数
1
解决办法
804
查看次数

无法找到提供商信息错误

我正在尝试使用contentprovider,但是我遇到了麻烦,因为我收到了"无法找到com.example.alex.hopefulyworks的提供商信息"的错误

这是清单和内容提供者

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.alex.hopefulythisworks" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <provider android:name=".ColorContentProvider"
            android:authorities="com.example.alex.hopefulythisworks.ColorContentProvider"
            android:enabled="true"
            android:exported="true" >
        </provider>

    </application>

</manifest>





    package com.example.alex.hopefulythisworks;
     ....
    public class ColorContentProvider extends ContentProvider {

    private ColorHelper database;

    private static final String AUTHORITY
            = "com.example.alex.hopefulythisworks";

    private static final String BASE_PATH
            = "tasks";

    public static final Uri CONTENT_URI
            = Uri.parse("content://" + AUTHORITY + "/" + BASE_PATH);
    public static final String …
Run Code Online (Sandbox Code Playgroud)

android android-contentresolver android-contentprovider

11
推荐指数
2
解决办法
2万
查看次数

SyncAdapter完成后如何通知调用Activity?

在我的Android项目中,我使用自定义SyncAdapter来下载数据并将其存储在本地SQLite数据库中.

public class CustomSyncAdapter extends AbstractThreadedSyncAdapter {

    public CustomSyncAdapter(Context context, boolean autoInitialize) {
        super(context, autoInitialize);
    }

    @Override
    public void onPerformSync(Account account,
                              Bundle extras,
                              String authority,
                              ContentProviderClient provider,
                              SyncResult syncResult) {

        // 1) Download data via AsyncTask
        // 2) Store data via ContentProvider
    }
}
Run Code Online (Sandbox Code Playgroud)

Activity使用ContentResolver诸如... 来安排主要的同步

ContentResolver.requestSync(account, Authentication.AUTHORITY, bundle);
Run Code Online (Sandbox Code Playgroud)

Activity在同步完成时是否有通用方式通知呼叫?

android synchronization callback android-contentresolver android-syncadapter

10
推荐指数
1
解决办法
4396
查看次数