ActivityResultContracts.TakePicture()

Wer*_*sch 6 android android-activity androidx

在 androidx.activity 版本 1.2.0-alpha05 中,TakePicture 合约的 API 已更改:

TakePicture 合约现在返回一个指示成功的布尔值而不是缩略图位图,因为在将图像写入提供的 Uri 时,相机应用程序很少支持这一点

虽然在 alpha04 回调中接收到一个 Bitmap 对象,但现在回调只接收一个描述成功的布尔对象。

所以现在launcher的launch方法的Uri Parameter一定不能为null,而必须是图片保存的目的地。没有设法创建一个被启动器接受的 Uri 对象,该对象可用于我的应用程序读取结果图片。

有没有人为我提供可以提供给启动器的有效 Uri 对象的示例?

Get*_*ood 7

我在互联网上找不到任何示例
这是一个示例。

File file = new File(getFilesDir(), "picFromCamera");
Uri uri = FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".provider", file);

ActivityResultLauncher<Uri> mGetContent = registerForActivityResult(
    new ActivityResultContracts.TakePicture(),
    new ActivityResultCallback<Boolean>() {
        @Override
        public void onActivityResult(Boolean result) {
                            
        // do what you need with the uri here ...
    }
});                        
mGetContent.launch(uri);
Run Code Online (Sandbox Code Playgroud)

注意1:您可能会遇到FileUriExposedException,需要公开此 uri 以供相机应用程序访问

相关:android.os.FileUriExposedException:file:///storage/emulated/0/test.txt 通过 Intent.getData() 暴露在应用程序之外

注2:如果你已经<uses-permission android:name="android.permission.CAMERA" />在manifest中声明,则启动前需要有权限,否则java.lang.SecurityException: Permission Denial

  • 在片段中,您应该在 onAttach 或 onCreate 方法中注册 ActivityResultLauncher (2认同)