在2018年从Android的图库中选择图像的方式是什么?

5 android image android-library

我想了解社区对于从常见来源获取Android图像以在我们的App中使用的问题的意见。我知道关于堆栈溢出的问题可以追溯到2010年,但是我发现这个简单任务的答案很多。

也许有人知道一些轻量级的库可以从图库(或其他常见来源)获取图像,因此代码可以保持简单易读

也许像这样:

            Bitmap image;

            SomeCoolLib.
            .performImageSelect()
            .asBitmap()  
            .listener(new RequestListener<String, Bitmap>() {
                @Override
                public boolean onException(Exception e) {
                    e.printStackTrace();
                    return false;
                }

                @Override
                public boolean onCancel() {
                    return false;
                }
            }).into(image);
Run Code Online (Sandbox Code Playgroud)

让用户:

这样我们就可以看到

Ale*_*ola 3

最好的方法是使用 Android 存储访问框架 ( https://developer.android.com/guide/topics/providers/document-provider.html )。

例如,在您的活动中,您可以请求设备和文档类型(如果您想按文档类型过滤,请注意intent.setType方法)。

此代码将打开 Android 文档选择器并让用户选择图像:

public class MainActivity extends AppCompatActivity {

    private static final int OPEN_DOCUMENT_CODE = 2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.floatingActionButton).setOnClickListener(view ->    {
            Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
            intent.addCategory(Intent.CATEGORY_OPENABLE);
            intent.setType("image/*");
            startActivityForResult(intent, OPEN_DOCUMENT_CODE);
        });

    }
}
Run Code Online (Sandbox Code Playgroud)

然后,只需在同一活动中实现onActivityResult即可接收所选图像:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
    if (requestCode == OPEN_DOCUMENT_CODE && resultCode == RESULT_OK) {
        if (resultData != null) {
            // this is the image selected by the user
            Uri imageUri = resultData.getData();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)