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

时间:2017-03-16 19:23:12

标签: android android-intent imageview action send

我正在研究聊天应用程序。我已成功将文本作为消息发送给接收者,现在我想通过捕获或从库中选择将图像作为消息发送。 我曾经历过一些像Intent类的ACTION_SEND这样的方法。但很难实现它。我曾为那些必须发送或接收的东西分别上课。

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);
}

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

1 个答案:

答案 0 :(得分:2)

首先,您需要创建一个自定义对话框或弹出窗口,让用户选择是否要使用相机捕获图像,或者他想从图库中选择一个图像,然后您需要调度正确的意图取决于他将选择什么,所以如果他选择从画廊捕捉和成像这将是你的意图

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

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

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

然后,当他成功地从图库中抓取图片或使用相机onActivityResult捕捉一张图片时,将使用返回的图像调用该图片,并且您应该在那里处理您要对该图像执行的操作你排卵方法

@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;
        }
    }

}

因此,您可以从上面的代码中看到,图库意图返回图像Uri,相机意图返回一个位图,现在您可以将图像编码为base64或将其转换为字节数组或将其添加到将文件发送给所需的收件人。

相关问题