从特定文件夹中选取图像
问题描述:
我参考此link以显示来自内部存储器中特定路径的图像。但它只与ACTION_VIEW工作,但是当我使用ACTION_PICK它没有显示相同的路径,而是它的简单的开放画廊。显示后有没有任何方法可以从特定路径中选择单个图像?从特定文件夹中选取图像
public class NewActivity extends AppCompatActivity{
private static final String file_path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/fun";
private File[] allFiles ;
private String imagepath ;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
File folder = new File(file_path);
allFiles = folder.listFiles();
findViewById(R.id.start).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new SingleMediaScanner(NewActivity.this, allFiles[0]);
}
});
}
public class SingleMediaScanner implements MediaScannerConnection.MediaScannerConnectionClient {
private MediaScannerConnection mMs;
private File mFile;
public SingleMediaScanner(Context context, File f) {
mFile = f;
mMs = new MediaScannerConnection(context, this);
mMs.connect();
}
public void onMediaScannerConnected() {
mMs.scanFile(mFile.getAbsolutePath(), null);
}
public void onScanCompleted(String path, Uri uri) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setData(uri);
startActivityForResult(intent, 100);
mMs.disconnect();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==100 && resultCode==RESULT_OK){
try{
Uri selectedImageUri = data.getData();
String[] projection = {MediaStore.Images.Media.DATA};
//Cursor cursor_gallery = activity.managedQuery(selectedImageUri, projection, null, null, null);
Cursor cursor_gallery = getContentResolver().query(selectedImageUri, projection, null, null, null);
int column_index = 0;
if (cursor_gallery != null) {
column_index = cursor_gallery.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor_gallery.moveToFirst();
imagepath = cursor_gallery.getString(column_index);
cursor_gallery.close();
}
System.out.println("sammy_imagepath "+imagepath);
}catch(Exception e){
e.printStackTrace();
}
}
}
}
答
当你做一个ACTION_PICK意图,你问其他应用程序来执行操作(让他们选择一个文件)。没有办法确保它以某种方式工作 - 用户可以轻松添加另一个实现ACTION_PICK的应用程序并执行其他操作。所以不,没有办法确保它会从这条路上选择。如果你确实需要这个,你需要实现你自己的选择器,而不是使用ACTION_PICK。
你是什么意思“实现你自己的选择器”?怎么做? – Sammy
您可以编写一个活动,以列表或网格视图显示活动中的所有文件,并让您选择一个。基本的一个可以在一两个小时内完成。当然,一个好看的人会花更长的时间。 –
明白了。让我试试这个。 – Sammy