我已经在这个问题上困扰了好几天。如果有任何一点评论可以帮助节省一名程序员,那么... 我有这两个A和B活动。 活动是在 startActivityForResult()中调用B活动的活动。 B活动是添加了“摄影机”的“摄影机”活动。 B活动拍摄的照片需要发送回A活动。
我拍摄的照片通过PictureCallback通过 byte []个数据接收。这就是问题所在。我希望用户至少拍摄2〜3张(或更多)图片,所以我试图使这些字节数组成为列表形式。
位图列表是不可能的,因为当其超过40kb时,它会导致失败的绑定交易错误。
ArrayList
我试图通过for循环将照片的每个字节[]数据保存到Intent Extra。但是由于(我认为)容量问题,当B活动完成时,它将刷新应用程序。 (它没有被logcat捕获,因为它不会使应用程序崩溃)
我未包含任何代码,因为认为不需要。如果您对此感到好奇,我会立即向您显示您喜欢的任何代码。
如果有更好的方法,或者对我的审判没有多少反馈,对我来说就意味着很多。并非常感谢。感谢您的阅读!
活动
R
}
B_Activity(相机活动)
public class A_Activity extends AppCompatActivity{
private static final int CAMERA_REQUEST_CODE = 101;
private FrameLayout accidentFrame;
private FragmentManager manager;
......
ArrayList< byte[] > sending_list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_accident_record);
sending_list = new ArrayList<>();
....
// button that moves to B Activity
findViewById(R.id.btnCamera).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent cameraIntent = new Intent(A_Activity.this, B_Activity.class);
........
startActivityForResult(cameraIntent, CAMERA_REQUEST_CODE);
}
});
//
....
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (requestCode == CAMERA_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
int size = data.getExtras().getInt("array_size");
for(int i = 0; i<size ; i++){
sending_list.add(data.getByteArrayExtra("byte_array" + i));
}
}
}
}
private void sendResult() {
// There is a reason using map!
HashMap<String, ArrayList<byte[]>> thisMap = new HashMap<>();
thisMap.put("0", sending_list);
Intent picturesData = new Intent();
picturesData.putExtra("data_map", thisMap);
startActivity(new Intent(A_Activity.this, C_Activity.class));
}
}
答案 0 :(得分:1)
请勿传递图像。它效率低下,您很快就会达到大小限制。只需传递参考,就像您在onActivityResult()
中从Camera收到的那样。或者,如果需要,将该图像文件存储在某个地方(SD卡,专用存储设备)并将Uri传递给它。不要传递二进制Blob。
答案 1 :(得分:0)
将字节数组传递给意图:-
Intent intent = new Intent(this, NextActivity.class);
intent.putExtra("picture", byteArray);
startActivity(intent);
从捆绑中获取字节数组并转换为位图图像:-
Bundle extras = getIntent().getExtras();
byte[] byteArray = extras.getByteArray("picture");