Android 从库中的文件夹打开图片
我想使用Android Gallery打开特定文件夹中的所有图片。我在一个老问题中找到了解决办法,但没有奏效。代码是:Android 从库中的文件夹打开图片,android,android-intent,android-gallery,Android,Android Intent,Android Gallery,我想使用Android Gallery打开特定文件夹中的所有图片。我在一个老问题中找到了解决办法,但没有奏效。代码是: public class MainActivity extends Activity implements MediaScannerConnectionClient { public String[] allFiles; private String SCAN_PATH; private static final String FILE_TYPE = "image/*"; p
public class MainActivity extends Activity implements MediaScannerConnectionClient {
public String[] allFiles;
private String SCAN_PATH;
private static final String FILE_TYPE = "image/*";
private MediaScannerConnection conn;
private String folderName = "MyAPP";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.album);
File folder = new File("/sdcard/"+folderName+"/");
allFiles = folder.list();
SCAN_PATH = Environment.getExternalStorageDirectory().toString()
+ "/"+folderName+"/" + allFiles[0];
Button scanBtn = (Button) findViewById(R.id.button1);
scanBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
startScan();
}
});
}
private void startScan() {
if (conn != null) {
conn.disconnect();
}
conn = new MediaScannerConnection(this, this);
conn.connect();
}
public void onMediaScannerConnected() {
conn.scanFile(SCAN_PATH, FILE_TYPE);
}
public void onScanCompleted(String path, Uri uri) {
try {
if (uri != null) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setData(uri);
startActivity(intent);
}
} finally {
conn.disconnect();
conn = null;
}
}
}
使用此代码,我得到以下错误:
08-14 11:09:20.093: W/ContentResolver(25151): Failed to get type for: content://media/external/images/media/10471 (Unknown URL : content://media/external/images/media/10471)
08-14 11:09:20.093: E/JavaBinder(25151): *** Uncaught remote exception! (Exceptions are not yet supported across processes.)
08-14 11:09:20.093: E/JavaBinder(25151): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.GET_CONTENT dat=content://media/external/images/media/10471 }
08-14 11:09:20.093: E/JavaBinder(25151): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1545)
08-14 11:09:20.093: E/JavaBinder(25151): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1416)
08-14 11:09:20.093: E/JavaBinder(25151): at android.app.Activity.startActivityForResult(Activity.java:3351)
08-14 11:09:20.093: E/JavaBinder(25151): at android.app.Activity.startActivityForResult(Activity.java:3312)
08-14 11:09:20.093: E/JavaBinder(25151): at android.app.Activity.startActivity(Activity.java:3522)
08-14 11:09:20.093: E/JavaBinder(25151): at android.app.Activity.startActivity(Activity.java:3490)
08-14 11:09:20.093: E/JavaBinder(25151): at com.example.camtest.MainActivity.onScanCompleted(MainActivity.java:64)
08-14 11:09:20.093: E/JavaBinder(25151): at android.media.MediaScannerConnection$1.scanCompleted(MediaScannerConnection.java:53)
08-14 11:09:20.093: E/JavaBinder(25151): at android.media.IMediaScannerListener$Stub.onTransact(IMediaScannerListener.java:60)
08-14 11:09:20.093: E/JavaBinder(25151): at android.os.Binder.execTransact(Binder.java:367)
08-14 11:09:20.093: E/JavaBinder(25151): at dalvik.system.NativeStart.run(Native Method)
如果我能让这段代码正常工作就可以了,但我可以使用你建议我的任何其他想法
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setData(uri);
startActivity(intent);
上面使用的代码是在gallery中打开图片,但不是向gallery传递uri以打开图片。
如果您想通过gallery查看文件夹中的图片,我向您介绍要查看的内容,希望对您有所帮助。请尝试单击此按钮
browse.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, RESULT_LOAD_IMAGE);
}
})
您可以将此选定图像设置到应用程序中,如下所示
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
picturePath = cursor.getString(columnIndex);
cursor.close();
imageView = (ImageView) findViewById(R.id.property_image);
imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
}}
在第一段代码中,我使用startActivityForResulti,RESULT\u LOAD\u IMAGE;这会将结果返回到调用的活动,我们可以通过第二块代码获得此结果,并在ImageView中设置所选图像 秘密在于找到文件夹所表示的bucket/album。Bucket在MediaScan成功后显示,因此请确保您要显示的任何图像/视频都已按照上面多次演示的方式首先扫描 假设我在/sdcard/myapp/myapps文件夹中有一个索引文件夹: 现在我们有了专辑的bucketId,我们可以用一个简单的意图打开它 过滤视频文件:
Uri mediaUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
筛选图像文件:
Uri mediaUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
我可以用内置的Gallery应用程序验证这一点。里程数可能因谷歌照片等其他应用程序而异
我还没有弄清楚如何不过滤图像/视频,即使在Gallery中,您可以选择不带过滤器的特定相册
通过查看gallery应用程序的AOSP源代码,我发现了这一点
此问题也是以下问题的副本:我已从特定文件夹中检索图像路径,并将其显示在回收器视图中。代码在Kotlin中,但您可以从
private fun getAllShownImagesPath(): ArrayList<String> {
var filePath: ArrayList<String> = ArrayList<String>()
val path = File(getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).path, "BacFo Camera")
if (path.exists()) {
for (i in path.list().iterator()) {
filePath?.add("" + path.toString() + "/" + i)
}
}
return filePath!!
}
所以,现在您有了图像路径列表,您可以使用recycler view Adapter将其传递到recycler view。简单:-1。有意尝试。setTypeimage/*;在宣布意图之后。2.在这里读一点。在清单中声明活动检查此项以防万一。4.图片库的图片类型是什么?请详细说明您的问题,我想使用Android Gallery打开特定文件夹中的所有图片是什么意思。??我想打开一个图片库,但只打开名为MyApp的文件夹中的图片。我想区别在于您使用的是Intent.ACTION\u GET\u CONTENT,应该是Intent.ACTION\u视图。
if (bucketId.length() > 0) {
mediaUri = mediaUri.buildUpon()
.authority("media")
.appendQueryParameter("bucketId", bucketId)
.build();
}
Intent intent = new Intent(Intent.ACTION_VIEW, mediaUri);
startActivity(intent);
private fun getAllShownImagesPath(): ArrayList<String> {
var filePath: ArrayList<String> = ArrayList<String>()
val path = File(getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).path, "BacFo Camera")
if (path.exists()) {
for (i in path.list().iterator()) {
filePath?.add("" + path.toString() + "/" + i)
}
}
return filePath!!
}