【问题标题】:Pick images from specific folder从特定文件夹中选择图像
【发布时间】:2018-02-18 14:48:00
【问题描述】:

我引用这个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();
            }
        }
    }
}

【问题讨论】:

    标签: android android-external-storage


    【解决方案1】:

    当您创建一个 ACTION_PICK 意图时,您是在要求另一个应用程序执行一个操作(让他们选择一个文件)。没有办法确保它以某种方式工作——用户可以很容易地添加另一个实现 ACTION_PICK 并执行其他操作的应用程序。所以不,没有办法确保它会从那条路径中选择。如果您绝对需要,您需要实现自己的选择器,而不是使用 ACTION_PICK。

    【讨论】:

    • “实现你自己的选择器”是什么意思?该怎么做?
    • 您编写了一个 Activity,它以列表或网格视图的形式显示 Activity 中的所有文件,并让您选择一个。一个基本的可以在一两个小时内完成。当然,好看的需要更长的时间。
    • 知道了。让我试试这个。
    猜你喜欢
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多