registerActivityForResult从相机获取结果



特别是@Muntashir Akon,我来自&;Down under &;,如果你能抽出点时间的话。

我们都知道startActivityForResultDEPRECATED谢谢谷歌。我们如何从相机得到结果…这是我的代码intentData总是返回null. 请帮帮我,这快把我逼疯了。

我可能打错电话了,但是我在网上找不到任何东西

对于@Muntashir Akon,实际的来电者是你的…

protected final RegisterActivityResultHelper<Intent, 
ActivityResult> activityLauncher =
RegisterActivityResultHelper.registerActivityForResult( 
this );
RegisterActivityForResult
ActivityResultLauncher activityResultLauncher =
registerForActivityResult( new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback()
{
@Override
public void onActivityResult( Object result )
{
}
});
/////////////////////////////////////////////////////////////////////////////////////
private void takePhoto()
{
String uuid = UUID.randomUUID().toString();
File outputDir = getCacheDir();
File file;
try
{
file = File.createTempFile( uuid, ".jpg", outputDir );
}
catch( IOException e )
{
return;
}
Intent intent = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
Uri uri;
try
{
uri = FileProvider.getUriForFile( Objects.requireNonNull(
getApplicationContext()),
BuildConfig.APPLICATION_ID + ".fileProvider", file );
}
catch( IllegalArgumentException e )
{
return;
}
intent.putExtra( MediaStore.EXTRA_OUTPUT, uri );
activityLauncher.launch( intent );
activityLauncher.setOnActivityResult( result ->
{
if( result.getResultCode() == RESULT_CANCELED )
return;
Intent intentData = result.getData();
if( intentData == null )
{
return;
}
Uri imageUri = intentData.getData();
Bundle bundle = intentData.getExtras();
Log.e("URI",imageUri.toString());
Bitmap bmp = ( Bitmap ) bundle.get( "data" );
} );
}

好了,我有答案了,希望对大家有所帮助。

发射器…

/////////////////////////////////////////////////////////////////
ActivityResultLauncher<Uri> takeAPhoto = registerForActivityResult(
new ActivityResultContracts.TakePicture(), result ->
{
if( !result  )
return;
Helpers.loadPicIntoGlide( ivItemImage, photoTakenUri );
etImageName.setText( photoTakenUri.getPath() );
} );

调用者……

/////////////////////////////////////////////////////////////////////////////////////
private void takePhoto()
{
String uuid = UUID.randomUUID().toString();
File outputDir = getCacheDir();
File file;
try
{
file = File.createTempFile( uuid, ".jpg", outputDir );
}
catch( IOException e )
{
return;
}
try
{
photoTakenUri = FileProvider.getUriForFile( Objects.requireNonNull(
getApplicationContext()),
BuildConfig.APPLICATION_ID + ".fileProvider", file );
}
catch( IllegalArgumentException e )
{
return;
}
takeAPhoto.launch( photoTakenUri );
}
////////////////////////////////////////////////////////////////////////

看看这篇关于RegisterActivityForResult在Medium上的文章,它有一些使用它的例子,包括相机。

最新更新