我使用以下代码将草稿插入内容:// sms/draft
ContentValues values = new ContentValues();
values.put("address", receiver2);
values.put("body", body2);
values.put("date", String.valueOf(System.currentTimeMillis()));
values.put("type", "3");
values.put("thread_id", thread_id);
getContentResolver().insert(Uri.parse("content://sms/draft"), values);
Run Code Online (Sandbox Code Playgroud)
如果没有与上面地址的任何对话,thread_id为0,否则它是该线程的id.
当我运行此代码时,草稿确实已保存,但本机短信客户端(股票android 4.0.3)中的线程未更新为"草稿"[我可以看到草稿邮件正文,但没有"草稿"标签就可以了.我必须打开 - 关闭线程,以便标记为标记].我已经在某处读到了线程无法正确更新的问题.如何强制更新线程,以便在所有客户端中显示正常?
编辑:
阅读完答案后,我已经更新了我的代码,但问题仍然存在.我在下面添加了一个截图,因为当我写下我的问题时,我很匆忙而且写得不够清楚.
protected void save_draft(String[] recipients, String body) {
Uri threadIdUri = Uri.parse("content://mms-sms/threadID");
Uri.Builder builder = threadIdUri.buildUpon();
for (String recipient : recipients) {
builder.appendQueryParameter("recipient", recipient);
}
Uri uri = builder.build();
Long thread_id = get_thread_id(uri);
Log.d("thread_id", thread_id + " ");
ContentValues values = new ContentValues();
values.put("body", body);
values.put("date", String.valueOf(System.currentTimeMillis()));
values.put("type", 3);
values.put("thread_id", thread_id);
getContentResolver().insert(Uri.parse("content://sms/draft"), values);
//^tried "content://sms/" …Run Code Online (Sandbox Code Playgroud) 我正在尝试以编程方式将事件添加到用户的日历中.我在StackOverflow和其他地方跟踪了无数的指南,但是没有一个会在我的日历中显示那个该死的事件.这是我目前的代码:
public void saveGamesToCalendar() {
showCalendarPopup();
}
private void showCalendarPopup() {
final ContentResolver cr;
final Cursor result;
final Uri uri;
List<String> listCals = new ArrayList<String>();
final String[] projection = new String[] {CalendarContract.Calendars._ID, CalendarContract.Calendars.ACCOUNT_NAME, CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, CalendarContract.Calendars.NAME,};
uri = CalendarContract.Calendars.CONTENT_URI;
cr = context.getContentResolver();
result = cr.query(uri, projection, null, null, null);
if(result.getCount() > 0 && result.moveToFirst()) {
do {
listCals.add(result.getString(result.getColumnIndex(CalendarContract.Calendars.NAME)));
} while(result.moveToNext());
}
CharSequence[] calendars = listCals.toArray(new CharSequence[listCals.size()]);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Calendar to use:");
builder.setItems(calendars, new DialogInterface.OnClickListener() {
@Override
public void …Run Code Online (Sandbox Code Playgroud) 我想导出一个ContentProvider供另一个MY应用程序使用.如何阻止其他应用访问它?如果我使用android:permission属性,第三方应用程序是否只能将该权限应用于他们的应用程序?我真的需要锁定对我的应用程序的访问权限.
提前致谢...
我需要从我的 RecyclerAdapter 共享一个图像,因为该图像最初并不存在,即使用适配器在 Activity 中加载。如何将位图分享到社交媒体?每次我在我的应用程序中单击共享时,它都会显示“没有应用程序可以执行此操作”。
feedItemView.setFeedSocialShareClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Share to Social Media
ImageView imageView = (ImageView) feedItemView.findViewById(R.id.image);
Drawable mDrawable = imageView.getDrawable();
Bitmap mBitmap = ((BitmapDrawable)mDrawable).getBitmap();
String path = MediaStore.Images.Media.insertImage(context.getContentResolver(),
mBitmap, "Design", null);
Uri uri = Uri.parse(path);
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image");
share.putExtra(Intent.EXTRA_STREAM, uri);
share.putExtra(Intent.EXTRA_TEXT, "I found something cool!");
context.startActivity(Intent.createChooser(share, "Share Your Design!"));
}
});
Run Code Online (Sandbox Code Playgroud) java android android-contentresolver android-sharing android-recyclerview
我正在开发一个应用程序,当用户通过任何方式(无论是下载还是传输)插入新图像、视频、音频或 apk 时,我必须立即通知用户,类似于文件管理器应用程序所做的.我不知道从哪里开始。谢谢
我几乎完成了我的应用......但现在我不能像这样使用ContentResolver:
Bitmap imageBitmap = MediaStore.Images.Media.getBitmap(
getContentResolver(), imageUri); // Problem!!!!!
Run Code Online (Sandbox Code Playgroud)
我不知道如何解决这个问题...如果我在main-Activity中使用这种语法,它会起作用...但它在我的类CustomItemizedOverlay中不起作用.
我标记了我必须解决的问题......
eclipse说:对于CustomItemizedOverlay类型,未定义了方法getContentResolver()
import java.util.ArrayList;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;
import android.app.Dialog;
import android.app.AlertDialog;
import android.widget.TextView;
import android.view.View;
import android.widget.ImageView;
import android.view.LayoutInflater;
import android.widget.Toast;
import android.view.ViewGroup;
import android.provider.MediaStore;
import android.provider.MediaStore.Images;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.app.Application;
import android.content.ContentResolver;
import android.content.Context;
public class CustomItemizedOverlay extends ItemizedOverlay<OverlayItem> {
private ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>();
private String title;
private String id_string;
private String type;
private String name; …Run Code Online (Sandbox Code Playgroud) 我试图在日历programmaticaly中添加事件,事件立即出现在Android手机的日历应用程序中,但在谷歌日历中它们出现一段时间后,我希望它们立即出现在谷歌日历中.
我在网上搜索,发现一篇帖子提到"ContentResolver.setSyncAutomatically(帐户帐户,字符串权限,布尔同步)功能可以提供帮助.
但是我不明白,String权限是什么?ContentResolver的文档说它是"行为受到控制的提供者"......这是什么意思?
我是内容提供商的新手,我一直在参考这个文档,以便了解和创建自定义内容提供商.
我在内容提供程序的内容描述符类中有这样的路径:
public static final String PATH = "tbl_reco_index_contents";
public static final String PATH_FOR_ID = "tbl_reco_index_contents/*";
Run Code Online (Sandbox Code Playgroud)
使用下面的代码,我可以从我需要的列中获取数据,而不会出现任何问题:
public static final String AUTHORITY = "com.nyk.launcherprovider";
private static final Uri BASE_URI = Uri.parse("content://" + AUTHORITY);
public static final String PATH = "tbl_reco_index_contents";
public static final Uri CONTENT_URI = BASE_URI.buildUpon().appendPath(PATH).build();
cur = this.getContentResolver().query(CONTENT_URI, new String[]{
"reco_index_content_name",
"reco_index_content_url"
}, null, null, null);
cur.moveToFirst();
for(int i=0;i<cur.getCount();i++){
System.out.println("Name is:"+cur.getString(10));
System.out.println("URL is:"+cur.getString(11));
cur.moveToNext();
}
Run Code Online (Sandbox Code Playgroud)
我不知道,我如何使用where条件获取数据.即; 如果我需要添加一个条件WHERE user_profile_number = 2 and pkg_name = 'abc',我如何处理上面的代码. …
有了这段代码
public static List<App> findByKeyword(Context context, String keyword){
ContentResolver resolver = context.getContentResolver();
Uri uri = getContentUri();
String[] projection = DataColumns.ALL;
String selection = DataColumns.NAME+" like '%?%' ";
String[] selectionArgs = {keyword};
Cursor cursor = resolver.query(uri, projection, selection, selectionArgs, DEFAULT_ORDER );
return cursorToList(cursor);
}
Run Code Online (Sandbox Code Playgroud)
我收到错误
引起:java.lang.IllegalArgumentException:无法绑定索引1处的参数,因为索引超出范围.该语句有0个参数.
应该是SQLite原始查询,SELECT * FROM table WHERE name LIKE '%?%'
但是通过ContentResolver查询API存在使用参数的问题
我也尝试过使用"引号
String selection = DataColumns.NAME+" like \"%?%\" ";
Run Code Online (Sandbox Code Playgroud)
它还说
该语句有0个参数.
我正试图从uri那里得到路径.它适用于kitkat以下的设备.我用Google搜索,发现我需要获取文档ID,然后使用库项目查询它.它有效.但我面临视频问题.当我从视频部分选择视频时,它可以正常工作.但是当我从Gallery中选择它时,我的应用程序崩溃了,给出了Illegal Argument异常 - 不是文档类型.我知道为什么会这样.这是因为我在Gallery部分中寻找文档类型的视频.但是如何防止这种情况.这样我就可以从图库和视频部分中选择视频.
这是我的代码:
public static String getRealPathFromURI(Context context, Uri contentUri,String type) {
if(isKitkatBelow()) {
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}else{
String docId= DocumentsContract.getDocumentId(contentUri);
String id= docId.split(":")[1];
if(type== TYPE_IMAGE){
String[] proj = { MediaStore.Images.Media.DATA };
String whereClause=MediaStore.Images.Media._ID + "=?";
Cursor cursor=context.getContentResolver().query(getUri(type),proj,whereClause,new String[]{id},null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}else{
String[] proj = { MediaStore.Video.Media.DATA };
String whereClause=MediaStore.Video.Media._ID + "=?";
Cursor cursor=context.getContentResolver().query(getUri(type),proj,whereClause,new String[]{id},null); …Run Code Online (Sandbox Code Playgroud)