标签: android-contentresolver

ContentResolver.insert返回null

从活动内部将声音设置为铃声/通知时,我有时会遇到问题:

ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, source);
values.put(MediaStore.MediaColumns.TITLE, "abc");
values.put(MediaStore.MediaColumns.SIZE, new File(source).length());
values.put(MediaStore.MediaColumns.MIME_TYPE, mime);
values.put(MediaStore.Audio.Media.ARTIST, "xyz");
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);

final Uri curi = MediaStore.Audio.Media.getContentUriForPath(source);
Uri uri = getContentResolver().insert(curi, values);
Run Code Online (Sandbox Code Playgroud)

大多数时间uri类似于"content:// media/external/audio/media/23",但有时它是null.我不知道问题所在,音频文件还可以(它们播放正常)显然插入方法不会抛出任何异常.我查看了文档,但没有关于返回null的方法.可能是什么问题呢?

android ringtone android-contentresolver

4
推荐指数
1
解决办法
3260
查看次数

使用ContentProvider而不是普通的SQLIte存储有什么好处?

我想在多个应用程序之间共享数据,而不是使用ContentResolver-> ContentProvider机制,我可以定义一个客户端库,它与正在执行SQLite DB操作的进程对话?

ContentProvider带来了什么,通过让Process公开数据我们无法实现?

android android-contentresolver android-contentprovider

4
推荐指数
1
解决办法
3965
查看次数

使用ContentProvider插入多个表

我正在实现一个PRIVATE ContentProvider,它有几个关系表(一对多,多对多).在我当前的实现中,所有表都可以通过URI访问.如何简化界面,以便URI不必访问内部的"通过"表?

例如,我有一个POSTS表,每个POST通过TAGGINGS表有很多TAGS.我想只与POSTS URI进行交互,并在内部进行"私有"工作ContentProvider.

为了query简单地返回带有连接表的游标,但我该怎么做insert呢?是bulkInsert我应该到什么?

android android-contentresolver android-contentprovider android-sqlite

4
推荐指数
1
解决办法
3987
查看次数

在 Android 中将原始资源设置为铃声

在我的 android 应用程序中,我想将文件raw夹中的音频文件设置为铃声。为此,我写了下面的代码,但它不起作用。

请帮我解决这个问题。谢谢你。

代码 :

String name =best_song_ever.mp3;
File newSoundFile = new File("/sdcard/media/ringtone",
                        "myringtone.mp3");
                Uri mUri = Uri.parse("android.resource://"
                        + context.getPackageName() + "/raw/" + name);
                ContentResolver mCr = context.getContentResolver();
                AssetFileDescriptor soundFile;
                try {
                    soundFile = mCr.openAssetFileDescriptor(mUri, "r");
                } catch (FileNotFoundException e) {
                    soundFile = null;
                }

            try {
                byte[] readData = new byte[1024];
                FileInputStream fis = soundFile.createInputStream();
                FileOutputStream fos = new FileOutputStream(newSoundFile);
                int i = fis.read(readData);

                while (i != -1) {
                    fos.write(readData, 0, i);
                    i = fis.read(readData);
                } …
Run Code Online (Sandbox Code Playgroud)

android mediastore android-contentresolver android-contentprovider android-mediaplayer

4
推荐指数
1
解决办法
5205
查看次数

android getContentResolver().notifyChange()不重启我的加载器

代码:

首先是我的Uris

public static final String PACKAGE    = "my.url.contentprovider";

public static final String TABLE_NAME = "NetworkTransaction";

public static final String AUTHORITY  = PACKAGE + ".NetTransContentProvider";

public static final Uri BASE_URI = Uri.parse("content://"+AUTHORITY);

public static final Uri CONTENT_URI_ANY_OBSERVER  = Uri.withAppendedPath(BASE_URI,TABLE_NAME+"/*");

public static final Uri CONTENT_URI_FIND_BY_ID  = Uri.withAppendedPath(BASE_URI,TABLE_NAME+"/FIND/ID");

public static final Uri CONTENT_URI_INSERT_OR_REPLACE_BY_ID    = Uri.withAppendedPath(BASE_URI,TABLE_NAME+"/INSERT/REPLACE/ID"); 

public static final Uri CONTENT_URI_INSERT_BY_ID   = Uri.withAppendedPath(BASE_URI,TABLE_NAME+"/INSERT/ID"); 
Run Code Online (Sandbox Code Playgroud)

和我的活动代码加载器:

@Override
protected void onResume() {
    super.onResume();
getSupportLoaderManager().restartLoader(NET_TRANS_LOADER_ID,mBundle,this).forceLoad();

}

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle bundle) {
    Uri uri = …
Run Code Online (Sandbox Code Playgroud)

android android-contentresolver android-contentprovider android-loadermanager android-loader

4
推荐指数
1
解决办法
2041
查看次数

安全内容提供商

是否可以将内容提供者设置为只读?我知道这个问题被问了几次,但根据所有问题(例如this),我必须编写自己的自定义写入权限。

<permission android:name="com.test.WRITE_DATABASE" android:protectionLevel="normal" />
<permission android:name="com.test.READ_DATABASE" android:protectionLevel="normal" />


//...

  <provider
     android:authorities="xxx"
     android:name="xxx"
     android:exported="true"
     android:readPermission="com.test.READ_DATABASE"
     android:writePermission="com.test.WRITE_DATABASE" />
Run Code Online (Sandbox Code Playgroud)

但是黑客可以反编译我的应用程序并查看清单文件,然后他可以轻松地编写自己的应用程序:

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

所以它几乎没用...我有几个应用程序可以在我的应用程序中使用一个内容提供程序。只有此应用程序应具有写入权限 - 其他应用程序只能从此数据库读取。有什么想法如何解决这个问题吗?

security android android-contentresolver android-contentprovider

4
推荐指数
1
解决办法
2273
查看次数

Android:覆盖 API 29 中现有 URI 的文件

以下代码获取 aString并将内容保存到现有文件中Uri。这些代码在 Android API 29 之前运行良好。

public void saveFile(String text, Uri existingSourceUri)
{
    try {

    ContentResolver cr = getContentResolver();
    OutputStream os = cr.openOutputStream(existingSourceUri);

    os.write(text.getBytes());
    os.flush();
    os.close();


    } catch (Exception e) {
       //show error message
    }
}
Run Code Online (Sandbox Code Playgroud)

对于 Android API 29+,行为不稳定。例如,如果第一次使用 some 调用该函数text,则该文件将被正确保存。但是,如果第二次text为空,则不会保存文件。

有什么帮助吗?

android uri outputstream file android-contentresolver

4
推荐指数
1
解决办法
1520
查看次数

我能在ContentResolver列查询上运行SQL函数吗?

我想知道在查询ContentProvider时,Android的ContentResolver是否支持在列上使用SQL函数.比如SQLite3的日期函数,要获取特定的日期格式,还是dateiff?

你怎么知道的?

android android-contentresolver android-contentprovider

3
推荐指数
1
解决办法
1725
查看次数

什么是getContentResolver().call()以及如何使用它

我已阅读有关Android ContentResolver的文档

我也搜索了一个合适的例子无济于事.

根据文档,call当标准内容提供程序方法不足时,有一种方法可用作访问自定义提供程序方法的方法:

final Bundle     call(Uri uri, String method, String arg, Bundle extras)
Call a provider-defined method.
Run Code Online (Sandbox Code Playgroud)

所以在我的代码中我执行:

getContentResolver().call(uri, method, arg, extras);
Run Code Online (Sandbox Code Playgroud)

但它总是返回 null 捆绑.实际上,提供程序中的方法永远不会被调用.

进一步的研究指出合同的(感知​​的)差异,其中RESOLVER具有uri参数而没有等效的PROVIDER参数:

Bundle   call(String method, String arg, Bundle extras)
Call a provider-defined method.
Run Code Online (Sandbox Code Playgroud)

我显然不理解某事.谁能指出我正确的方向?

android android-contentresolver

3
推荐指数
1
解决办法
6607
查看次数

如何在两个日期之间查询contentresolver?

如何MediaStore.Images.Media.EXTERNAL_CONTENT_URI在两个日期之间查询内容解析器()?我正在尝试使用代码,但这不起作用.

Calendar c = Calendar.getInstance()
Date date2 = c.getTime();
c.add(Calendar.YEAR,-1);
Date date1 = c.getTime();
Cursor cursor = getContentResolver().query( 
                  MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
                  projection, 
                  MediaStore.MediaColumns.DATE_ADDED + ">=? and "+MediaStore.MediaColumns.DATE_ADDED +"<=?", 
                  new String[]{"" + date1,""+date2}, 
                  MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC");
Run Code Online (Sandbox Code Playgroud)

android android-contentresolver

3
推荐指数
1
解决办法
2213
查看次数