Tag: android contentprovider

如何使用短信内容提供商? 文档在哪里?

我希望能够阅读系统的短信内容提供商。 基本上我想做一个短信应用程序,但它只会是有用的,如果我能看到过去的线程等 似乎有一个这样的内容提供商,但我找不到文件 – 任何人都知道这是什么? 谢谢 ——–编辑———– 好吧,我find了一个方法来获取短信收件箱提供商,我只是倾销在该提供商的所有列名称,如下所示: Uri uriSms = Uri.parse("content://sms/inbox"); Cursor c = context.getContentResolver().query(uriSms, null,null,null,null); // column names for above provider: 0: _id 1: thread_id 2: address 3: person 4: date 5: protocol 6: read 7: status 8: type 9: reply_path_present 10: subject 11: body 12: service_center 13: locked 我只是从网上find的随机线程拼凑在一起,我真的想知道这是全部logging(如果有的话)? 再次感谢

如何查询Android MediaStore Content Provider,避免孤立的图像?

我试图提供一个应用内活动,在设备的媒体商店中显示照片的缩略图,并允许用户select一个。 用户进行select后,应用程序将读取原始的全尺寸图像,并对其进行处理。 我使用以下代码在外部存储上的所有映像上创build一个Cursor : public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView( R.layout.image_select ); mGridView = (GridView) findViewById( R.id.image_select_grid ); // Query for all images on external storage String[] projection = { MediaStore.Images.Media._ID }; String selection = ""; String [] selectionArgs = null; mImageCursor = managedQuery( MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, projection, selection, selectionArgs, null ); // Initialize an adapter […]

从内部存储创build和共享文件

我的目标是在内部存储上创build一个XML文件,然后通过共享意图发送。 我能够使用此代码创build一个XML文件 FileOutputStream outputStream = context.openFileOutput(fileName, Context.MODE_WORLD_READABLE); PrintStream printStream = new PrintStream(outputStream); String xml = this.writeXml(); // get XML here printStream.println(xml); printStream.close(); 我卡住试图检索到输出文件的Uri,以分享它。 我第一次尝试通过将文件转换为Uri来访问该文件 File outFile = context.getFileStreamPath(fileName); return Uri.fromFile(outFile); 这将返回file:///data/data/com.my.package/files/myfile.xml,但我不能将其附加到电子邮件,上传等。 如果我手动检查文件的长度,这是正确的,并显示有一个合理的文件大小。 接下来,我创build了一个内容提供者,并试图引用该文件,而不是该文件的有效句柄。 ContentProvider似乎从未被称为任何一点。 Uri uri = Uri.parse("content://" + CachedFileProvider.AUTHORITY + "/" + fileName); return uri; 这将返回content://com.my.package.provider/myfile.xml,但是我检查文件,它的长度为零。 如何正确访问文件? 我是否需要与内容提供者创build文件? 如果是这样,怎么样? 更新 这是我用来分享的代码。 如果我selectGmail,它显示为附件,但是当我发送给出错误时无法显示附件,并且到达的电子邮件没有附件。 public void […]

私人内容提供商有什么用途?

Android 开发指南说 内容提供者也可用于读取和写入应用程序专用的数据,而不是共享数据。 内容提供者通常用于向不同的应用程序提供数据或在其间共享数据。 我想知道是否有任何使用私人提供商,不想分享它。 提供直接访问数据库或文件系统没有提供什么好处? 谢谢,拉加斯

使用ContentProviderClient与ContentResolver来访问内容提供者

Android内容提供者的文档描述了使用从getContentResolver()获得的ContentResolver来访问内容。 但是也有一个ContentProviderClient ,它可以从getContentResolver().acquireContentProviderClient(authority) 。 似乎在ContentResolver提供了或多或less相同的方法来访问提供者的内容。 什么时候应该使用ContentProviderClient而不是直接使用ContentResolver ? 有什么好处?

IllegalArgumentException:索引1处的绑定值为null

有人知道这是什么意思吗? 12-31 20:55:45.861: ERROR/AndroidRuntime(12478): Caused by: java.lang.IllegalArgumentException: the bind value at index 1 is null 12-31 20:55:45.861: ERROR/AndroidRuntime(12478): at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:234) 12-31 20:55:45.861: ERROR/AndroidRuntime(12478): at android.database.sqlite.SQLiteQuery.bindString(SQLiteQuery.java:182) 12-31 20:55:45.861: ERROR/AndroidRuntime(12478): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:48) 12-31 20:55:45.861: ERROR/AndroidRuntime(12478): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345) 12-31 20:55:45.861: ERROR/AndroidRuntime(12478): at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:330) 12-31 20:55:45.861: ERROR/AndroidRuntime(12478): at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:280) 12-31 20:55:45.861: ERROR/AndroidRuntime(12478): at net.lp.collectionista.providers.ProductContentProvider.query(ProductContentProvider.java:350) 12-31 20:55:45.861: ERROR/AndroidRuntime(12478): at android.content.ContentProvider$Transport.query(ContentProvider.java:163) […]

从Picasa // Google +同步文件夹中获取图片库中的图片不起作用

我正在尝试从Google+已同步的照片中的一个文件夹中获取图库应用中的图片。 select图像后,Uri被正确传回。 但是,当我尝试在存储设备上获取该映像的实际path时,我可以使用它,它会崩溃。 这个问题似乎是与picasa内容提供商专门有关的。 testingNexus S和Nexus 7以及其他设备。 E / AndroidRuntime(14572):java.lang.RuntimeException:传递结果失败ResultInfo {who = null,request = 1,result = -1,data = Intent {dat = content://com.google.android.gallery3d.provider / picasa / item / 5427003652908228690}} 在这里,dat字段似乎正确地通过了Uri,但是当我尝试获取图像的位置时,它会崩溃,并出现以下错误。 W / GalleryProvider(14381):不支持的列:_data 似乎Picasa相册的内容提供商没有_data字段。 获取位置的代码是: // imageUri是上面的Uri。 String [] proj = {MediaStore.Images.Media.DATA}; Cursor cursor = context.getContentResolver()。query(imageUri,proj,null,null,null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); String filePath = cursor.getString(column_index); cursor.close(); […]

如何在数据文件夹中将相机结果作为uri使用?

我正在创build一个应用程序,我想要捕获一个图像,然后我想发送该图像的电子邮件作为附件。 我打开一个使用android.provider.MediaStore.ACTION_IMAGE_CAPTURE意图行动的相机,我传递文件的Uri作为参数EXTRA_OUTPUT获取图像回文件。 这是完美的工作,我能够得到捕获的图像,如果我使用external storage uri作为EXTRA_OUTPUT但如果我使用数据文件夹uri它不工作,相机不闭合,其所有的button不工作。 这是我的代码在外部存储目录中获取结果 Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); File out = Environment.getExternalStorageDirectory(); out = new File(out, imagename); i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(out)); startActivityForResult(i, CAMERA_RESULT); 而这个代码是为了获取数据文件夹中的图像 Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); File out = getFilesDir(); out = new File(out, MyPharmacyOptions.PRESCRIPTION_IMAGE_NAME); i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(out)); startActivityForResult(i, CAMERA_RESULT); 我知道第三个应用程序无法访问数据文件夹,因此可能会导致问题,所以我创build了一个内容提供程序来共享文件。 这是我的内容提供类 public class MyContentProvider extends ContentProvider { private static final String […]

在Android中使用内容提供者公开多个表的最佳实践

我正在build立一个应用程序,我有一个活动桌和一个场地表。 我希望能够授予其他应用程序访问这些数据。 我有几个与这种问题的最佳实践有关的问题。 我应该如何构造数据库类? 我目前有EventsDbAdapter和VenuesDbAdapter类,它提供了查询每个表的逻辑,同时还有一个单独的DbManager(扩展SQLiteOpenHelper)用于pipe理数据库版本,创build/升级数据库以及访问数据库(getWriteable / ReadeableDatabase)。 这是推荐的解决scheme,或者我会更好的整合一个类(即DbManager)或分离的一切,让每个适配器扩展SQLiteOpenHelper? 我应该如何devise多个表的内容提供者? 扩展前面的问题,我应该为整个应用程序使用一个内容提供者,还是应该为事件和场所创build单独的提供者? 我发现的大多数例子只处理单个表格的应用程序,所以我会很感激这里的任何指针。

使用applyBatch插入数以千计的联系人条目很慢

我正在开发一个应用程序,我需要插入大量的联系人条目。 目前约有600个联系人,共有6000个电话号码。 最大的联系人有1800个电话号码。 截至今天的状态是,我创build了一个自定义帐户来保存联系人,因此用户可以select在联系人视图中查看联系人。 但是联系人的插入是非常缓慢的。 我使用ContentResolver.applyBatch插入联系人。 我已经尝试了不同大小的ContentProviderOperation列表(100,200,400),但总的运行时间大约是。 一样。 插入所有的联系人和号码大约需要30分钟! 我发现在SQlite中缓慢插入的大多数问题都会导致事务处理。 但是因为我使用ContentResolver.applyBatch方法,所以我不能控制这个,而且我会假设ContentResolver为我处理事务pipe理。 所以,对于我的问题:我做错了什么,或者我能做些什么来加速? 安德斯 编辑: @jcwenger:哦,我明白了。 很好的解释! 那么我将不得不先插入到raw_contacts表中,然后插入名字和数字的数据表。 我将失去的是在applyBatch中使用的raw_id的反向引用。 所以我将不得不把新插入的raw_contacts行的所有id用作数据表中的外键?