【问题标题】:sending image as a message to receiver将图像作为消息发送给接收者
【发布时间】:2017-08-08 03:51:50
【问题描述】:

我正在开发一个聊天应用程序。我已成功将文本作为消息发送给接收者,现在我想通过捕获或从图库中选择来发送图像作为消息。 我经历了一些方法,比如 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);
}

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

【问题讨论】:

    标签: android android-intent imageview action send


    【解决方案1】:

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

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

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

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

    然后在他成功地从图库中抓取一张图片或使用相机拍摄一张图片后,onActivityResult 方法将使用返回的图像调用,在那里你应该处理你将要处理的图像所以首先你 ovride方法

    @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 或将其转换为字节数组或将其添加到文件并将其发送给所需的接收者。

    【讨论】:

    • 感谢您的回答,但是如何从图库中找到所选图像的 uri?
    • 正如我在 switch 语句案例中 onActivityResult 方法的代码中所描述的那样,requestCode 等于您在触发意图时提供的 requestCode,然后您在返回的意图上调用 getData() 方法为data.getData() 获取 Uri。
    猜你喜欢
    • 2015-07-28
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 2019-10-11
    • 2017-09-26
    • 2013-08-13
    • 2013-11-21
    相关资源
    最近更新 更多