将图像作为消息发送给接收者

sending image as a message to receiver

我正在处理聊天 application.I 已成功将文本作为消息发送给接收者,现在我想通过捕获或从图库中选择来将图像作为消息发送。 我已经经历了一些方法,例如 Intent class 的 ACTION_SEND。但是很难实施。我已经为那些必须发送或接收的东西分开 class。

public class ChatMessage {
    private String messagetext;
    private String messageuser;
    private long messagetime;
    ImageView iv;

    public ChatMessage(String messagetext, String messageuser) {
        this.messagetext = messagetext;
        this.messageuser = messageuser;
        messagetime= new Date().getTime();
    }

    public ChatMessage() {

    }

    public String getMessagetext() {
        return messagetext;
    }

    public void setMessagetext(String messagetext) {
        this.messagetext = messagetext;
    }

    public String getMessageuser() {
        return messageuser;
    }

    public void setMessageuser(String messageuser) {
        this.messageuser = messageuser;
    }

    public long getMessagetime() {
        return messagetime;
    }

    public void setMessagetime(long messagetime) {
        this.messagetime = messagetime;
    }

} 

我通过以下方法填充这些:

private void displayChatMessage(){
    final ListView listofmessage= (ListView)findViewById(R.id.list_of_message);
    adapter=new FirebaseListAdapter<ChatMessage>(this,ChatMessage.class,R.layout.list_item,FirebaseDatabase.getInstance().getReference()) {
        @Override
        protected void populateView(View v, ChatMessage model, int position) {
            TextView messagetext,messaggeuser,messagetime;
            messagetext=(TextView)v.findViewById(R.id.message_text);
            messaggeuser=(TextView)v.findViewById(R.id.message_user);
            messagetime=(TextView)v.findViewById(R.id.message_time);

            messagetext.setText(model.getMessagetext());
            messaggeuser.setText(model.getMessageuser());
            messagetime.setText(DateFormat.format("dd-mm-yyyy (HH:mm:ss)",model.getMessagetime()));

        }
    };
    listofmessage.setAdapter(adapter);
}

所以,请提出一些方法。谢谢

首先,您需要创建一个自定义对话框或弹出窗口 window 让用户选择是想用相机拍摄图像还是想 select来自画廊,然后您需要根据他的选择发送正确的意图,因此如果他选择从画廊捕获和成像,这将是您的意图

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), yourRequestCode);

您的请求代码只是一个整数,您可以稍后在结果出现时区分它是对此意图操作的响应。 如果用户选择用相机拍照,这就是您的意图

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, selectedImageUri);
startActivityForResult(intent, antherRequestCode);

然后在他成功从图库中抓取图片或用相机拍摄后 onActivityResult 方法将用 returned 图像调用,在那里你应该处理你要去的地方处理那个图像,所以首先你要忽略方法

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (resultCode == RESULT_OK ){
        switch (requestCode) {
            case GALLERY_INTENT_REQUEST_CODE:

                Uri imageUri = data.getData();
                Log.e("ImageUri", imageUri != null ? imageUri.toString() : "Empty Uri");

                break;
            case TAKE_IMAGE_INTENT_REQUEST_CODE:
                Bundle extras = data.getExtras();

                Bitmap imageBitmap = (Bitmap) extras.get("data");
                Log.e("ImageUri", extras != null ? imageBitmap.toString() : "no Bitmap found");
                break;
        }
    }

}

因此,正如您从画廊意图上方的代码中看到的那样 return 图像 URI 和相机意图 return 位图,现在您拥有可以编码为 base64 的图像或将其转换为字节数组或将其添加到文件中并将其发送到所需的接收者。