Android - 来回传递意图
Android - passing Intents back and forth
我有两个活动:activity_main
和 activity_takeapicture
。我从 activity_main
开始一个意图,另一个 activity 拍照。然后 activity_takeapicture
将文件的另一个意图发送回 activity_main
。在 activity_main
中,我应该使用 onActivityResult
方法来捕获 activity_takeapicture
发送的意图并随后接收数据吗?这是 activity_main
中发送意图的部分:
Intent intent = new Intent(this, DisplayResult.class);
startActivity(intent);
这里是“activity_takeapicture”:
Intent intent = new Intent(context, MainActivity.class);
intent.putExtra(Intent.EXTRA_STREAM, pictureFile);
startActivity(intent);
编辑: 我已经尝试过你们所说的,但是现在 onActivityResult
在 activity_takeapicture
returns 意图时不会触发背部。我该如何解决?
你可以那样做,但你必须关闭所有你打开的意图以避免内存使用,当你返回时,你不会看到超过 9,000 个活动 xD
它不会避免内存使用,因为只有在您 return 之后它才会关闭 te Activity。
您还可以使用 alnActivityResult,这是更好的解决方案,因为您不会打开太多活动,而且对您和您的用户来说都很简单
如果activity_takeapicture
将图片保存在设备SD卡上,可以使用下面的方法。
intent.putExtra("SavedImageDirectory", filepath); //this will save the file path
然后在您的 activity_main
中您可以使用
//this will get the file path of the saved image
String ImageDirectory = getIntent().getStringExtra("SavedImageDirectory");
//this will decode the filepath into a bitmap
Bitmap bp = BitmapFactory.decodeFile(ImageDirectory);
//this will display the bitmap on your imageview on the `activity_main`
MyImageView.setImageDrawable(bp);
试试这个:
在你的Class中初始化一个静态变量
private static final int CAM_REQUEST = 1;
在您的按钮侦听器方法中
public void onClick(View v){
Intent takePictureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePictureIntent, CAM_REQUEST);
}
然后在你的 Activity 重写这个方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if(requestCode == CAM_REQUEST){
Bitmap thumbTaken = (Bitmap) data.getExtras().get("data");
yourImageView.setImageBitmap(thumbTaken);
}
}
并且不要忘记授予使用 CAMERA 的权限
希望对您有所帮助!!!
不要使用 startActivity
。请改用 startActivityForResult
。
我有两个活动:activity_main
和 activity_takeapicture
。我从 activity_main
开始一个意图,另一个 activity 拍照。然后 activity_takeapicture
将文件的另一个意图发送回 activity_main
。在 activity_main
中,我应该使用 onActivityResult
方法来捕获 activity_takeapicture
发送的意图并随后接收数据吗?这是 activity_main
中发送意图的部分:
Intent intent = new Intent(this, DisplayResult.class);
startActivity(intent);
这里是“activity_takeapicture”:
Intent intent = new Intent(context, MainActivity.class);
intent.putExtra(Intent.EXTRA_STREAM, pictureFile);
startActivity(intent);
编辑: 我已经尝试过你们所说的,但是现在 onActivityResult
在 activity_takeapicture
returns 意图时不会触发背部。我该如何解决?
你可以那样做,但你必须关闭所有你打开的意图以避免内存使用,当你返回时,你不会看到超过 9,000 个活动 xD 它不会避免内存使用,因为只有在您 return 之后它才会关闭 te Activity。
您还可以使用 alnActivityResult,这是更好的解决方案,因为您不会打开太多活动,而且对您和您的用户来说都很简单
如果activity_takeapicture
将图片保存在设备SD卡上,可以使用下面的方法。
intent.putExtra("SavedImageDirectory", filepath); //this will save the file path
然后在您的 activity_main
中您可以使用
//this will get the file path of the saved image
String ImageDirectory = getIntent().getStringExtra("SavedImageDirectory");
//this will decode the filepath into a bitmap
Bitmap bp = BitmapFactory.decodeFile(ImageDirectory);
//this will display the bitmap on your imageview on the `activity_main`
MyImageView.setImageDrawable(bp);
试试这个:
在你的Class中初始化一个静态变量
private static final int CAM_REQUEST = 1;
在您的按钮侦听器方法中
public void onClick(View v){
Intent takePictureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePictureIntent, CAM_REQUEST);
}
然后在你的 Activity 重写这个方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if(requestCode == CAM_REQUEST){
Bitmap thumbTaken = (Bitmap) data.getExtras().get("data");
yourImageView.setImageBitmap(thumbTaken);
}
}
并且不要忘记授予使用 CAMERA 的权限
希望对您有所帮助!!!
不要使用 startActivity
。请改用 startActivityForResult
。