如何将字节数组数据发送到其他活动?

时间:2019-04-09 02:46:52

标签: android

我已经在这个问题上困扰了好几天。如果有任何一点评论可以帮助节省一名程序员,那么... 我有这两个A和B活动。 活动是在 startActivityForResult()中调用B活动的活动。 B活动是添加了“摄影机”的“摄影机”活动。 B活动拍摄的照片需要发送回A活动。

我拍摄的照片通过PictureCallback通过 byte []个数据接收。这就是问题所在。我希望用户至少拍摄2〜3张(或更多)图片,所以我试图使这些字节数组成为列表形式。

  1. 位图列表是不可能的,因为当其超过40kb时,它会导致失败的绑定交易错误。

  2. ArrayList 是不可打包的,因此无法放入Intent Extra数据。

  3. 我试图通过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));
}

}

2 个答案:

答案 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");