我onActivityResult从mediastore图像选择返回,我可以使用以下内容获取图像的URI:
Uri selectedImage = data.getData();
Run Code Online (Sandbox Code Playgroud)
将其转换为字符串可以得到:
content://media/external/images/media/47
Run Code Online (Sandbox Code Playgroud)
或者路径给出:
/external/images/media/47
Run Code Online (Sandbox Code Playgroud)
但是我似乎无法找到将其转换为绝对路径的方法,因为我想将图像加载到位图而不必将其复制到某处.我知道这可以使用URI和内容解析器完成,但这似乎在重新启动手机时中断,我想MediaStore在重新启动之间不会保持其编号相同.
这开始是Android论坛上的一般用户问题.然而,它必然是一个编程问题.这是我的问题.
Android有一项服务 - MediaScanner - 它可以随时在后台运行(我相信)SD卡已卸载并重新安装.此服务收集卡上所有媒体文件的数据,并提供可由音乐应用程序查询的SQLite DB.大多数音乐应用程序都使用此服务,因为它可以节省与扫描SD卡相关的电量消耗.
自从我开始使用android以来,我一直遇到一个问题,即即使从SD卡中删除后,与该设备同步的M3U播放列表仍保留在此SQLite DB中.虽然卡上只有大约10个m3u的文件,但我现在已经收集了大约40个播放列表,这些播放列表出现在我使用的任何音乐应用程序中.剩余的播放列表不播放,并且是空的.我可以通过从音乐应用程序中删除它们来手动删除它们,但我厌倦了这样做.必须有更好的方法来删除这些鬼播放列表.
Android Market上有两个应用程序 - SDRescan和Music Scanner,据说可以做到这一点,但它们都不起作用.
我开始编写自己的应用程序来刷新或删除MediaStore数据库并从头开始,但我没有走得太远.我有一个运行以下代码的Android应用程序:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
Run Code Online (Sandbox Code Playgroud)
我在网上找到了一些这样的代码扫描SD卡的方法,但我没有任何运气.有小费吗?
完整代码:
package com.roryok.MediaRescan;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
public class MediaRescan extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
setContentView(R.layout.main);
}
//Rescan the sdcard after copy the file
private void rescanSdcard() throws Exception{
Intent scanIntent = …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用picasso库在mediastore中加载图像存储.当我调用load(imageview,callback)时,毕加索调用onFail而不是onSuccess.我如何知道图像未成功加载的原因?
我正在寻找:现有照片库名称的列表(希望它们的顶部缩略图)画廊的内容(我可以根据需要加载缩略图和完整大小)
我如何获得"画廊"列表(不知道这是否是Android中适用于Gallery应用程序中可见图像分组的正确术语...)及其内容?我需要访问其结构中的图库,而不使用现有的图库显示(我正在创建一个全新的,而不是照片请求者的过度层等)
我认为MediaStore.Images是我需要的地方,但我没有看到任何会给我分组的东西......
好的,我已经在这个项目上工作了几天,我的大部分时间都在研究如何在列表视图或其他内容列出设备上的所有音乐,我已经搜索了几天了,这是在杀我.我确实在一个文件夹中显示了所有音乐,但是因为大多数人都会有像艺术家和专辑这样的子文件夹,所以我需要一种方法来搜索子文件夹中的MP3或音乐文件.
这是我到目前为止音乐收藏的内容:
package com.androidhive.musicplayer;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.HashMap;
import android.provider.MediaStore;
public class SongsManager {
// SDCard Path
final String MEDIA_PATH = new String(MediaStore.Audio.Media.getContentUri("external").toString());
private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
// Constructor
public SongsManager(){
}
/**
* Function to read all mp3 files from sdcard
* and store the details in ArrayList
* */
public ArrayList<HashMap<String, String>> getPlayList(){
File home = new File(MEDIA_PATH);
if (home.listFiles(new FileExtensionFilter()).length > 0) {
for (File file : home.listFiles(new FileExtensionFilter())) …Run Code Online (Sandbox Code Playgroud) 例外情况是:
file:// Uri exposed through ClipData.Item.getUri()
java.lang.Throwable: file:// Uri exposed through ClipData.Item.getUri()
at android.os.StrictMode.onFileUriExposed(StrictMode.java:1618)
at android.net.Uri.checkFileUriExposed(Uri.java:2341)
at android.content.ClipData.prepareToLeaveProcess(ClipData.java:808)
at android.content.Intent.prepareToLeaveProcess(Intent.java:7926)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1506)
at android.app.Activity.startActivityForResult(Activity.java:3832)
at android.app.Activity.startActivityForResult(Activity.java:3783)
at android.support.v4.app.FragmentActivity.startActivityFromFragment(Unknown Source)
at android.support.v4.app.Fragment.startActivityForResult(Unknown Source)
at me.chunyu.ChunyuDoctor.Utility.w.takePhoto(Unknown Source)
at me.chunyu.ChunyuDoctor.Dialog.ChoosePhotoDialogFragment.takePhoto(Unknown Source)
at me.chunyu.ChunyuDoctor.Dialog.ChoosePhotoDialogFragment.access$000(Unknown Source)
at me.chunyu.ChunyuDoctor.Dialog.b.onClick(Unknown Source)
at me.chunyu.ChunyuDoctor.Dialog.ChoiceDialogFragment.onClick(Unknown Source)
at android.view.View.performClick(View.java:4848)
at android.view.View$PerformClick.run(View.java:20270)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5643)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Run Code Online (Sandbox Code Playgroud)
我的代码在这里:
public static void takePhoto(Fragment fragment, int token, Uri uri) {
Intent …Run Code Online (Sandbox Code Playgroud) 我曾经使用MediaStore.Images.Media.insertImage但insertImage方法保存图像现在已弃用。该文件说:
此方法在 API 级别 29 中已弃用。插入图像应使用MediaColumns#IS_PENDING执行,它提供了对生命周期的更丰富的控制。
我真的不明白,因为MediaColumns.IS_PENDING它只是一个标志,我应该如何使用它?
我应该使用ContentValues吗?
在类MediaStore.Files类中,它提到了,
媒体提供程序表,包含媒体存储中所有文件的索引,包括非媒体文件.
我有兴趣查询像PDF这样的非媒体文件.
我正在使用CursorLoader来查询数据库.对于构造函数的第二个参数需要一个开放的参数,它是容易得到媒体类型的音频,图像和视频为他们每个人都有一个EXTERNAL_CONTENT_URI,并INTERNAL_CONTENT_URI为它们定义的常量.
对于MediaStore.Files,没有这样定义的常量.我尝试使用该getContentUri()方法但无法找出参数值volumeName.我尝试给出"/ mnt/sdcard"以及将设备连接到我的系统时出现的卷名但是徒劳无功.
我在Google网上论坛上看到了类似的问题但尚未解决.
编辑:我也尝试使用Uri.fromFile(新文件("/ mnt/sdcard /"))和Uri.parse(新文件("/ mnt/sdcard").toString()),但这也没有用.
我正在努力更改ID3标签,音频文件中的元数据,例如:
而核心点,.已编辑的ID3标签应仅显示在我的应用中.
我正在使用自定义视图,并且我正在使用画布,用户可以在其中绘制任何内容,之后我想将该图像保存在SD卡中,但是无法做到这一点.不知道发生了什么.
else if(view.getId()==R.id.save_btn){
//save drawing
AlertDialog.Builder saveDialog = new AlertDialog.Builder(this);
saveDialog.setTitle("Save drawing");
saveDialog.setMessage("Save drawing to device Gallery?");
saveDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener(){
private FileOutputStream fOut;
public void onClick(DialogInterface dialog, int which){
//save drawing
drawView.setDrawingCacheEnabled(true);
//attempt to save
String imgSaved = MediaStore.Images.Media.insertImage(
getContentResolver(), drawView.getDrawingCache(),
UUID.randomUUID().toString()+".png", "drawing");
//feedback
if(imgSaved!=null){
Toast savedToast = Toast.makeText(getApplicationContext(),
"Drawing saved to Gallery!", Toast.LENGTH_SHORT);
savedToast.show();
}
else{
Toast unsavedToast = Toast.makeText(getApplicationContext(),
"Oops! Image could not be saved.", Toast.LENGTH_SHORT);
unsavedToast.show();
}
drawView.destroyDrawingCache();
}
});
saveDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, …Run Code Online (Sandbox Code Playgroud)