有人知道如何在代码中向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,而且我遇到了一个涉及调用自定义内容提供商的问题.我一直在教学书中使用一个例子,虽然它描述了如何创建自定义提供者,但没有明确的例子如何调用其中的特定方法.我特别研究如何从自定义内容提供程序中删除单个记录.
以下是自定义内容提供程序(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
您好我正在实施一个短信应用程序,现在能够检索所有消息与他们各自的联系信息,如显示名称,照片uri ..并在一个自定义列表中显示它们在项目点击带您进行相应的讨论.在这里我的问题是同步所有这些消息的时间,
这是我的代码:
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
我正在使用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
有没有办法缩短这个时间?我正在使用光标运行并获取姓名,电话号码和电子邮件
如果我从查询循环中删除电话号码查询,它将在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应用程序,它依赖于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
我想在ActionBar中显示ProgressBar,而我的SyncAdapter正在主动与Web同步内容.
我已尝试将SyncStatusObserver与ContentProvider.addStatusChangeListener一起使用.但是,我无法检查SyncAdapter是否正在运行.我只能检查:
可以组合这些标志:!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) 我有一个查询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
我正在尝试使用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项目中,我使用自定义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