2017-03-16 116 views
0

我在聊天application.I工作已成功发送文本消息到接收器,现在我想无论是通过捕获或从图库中选择发送图像的消息。 我已经经历了一些像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); 
} 

的话,请提出了一些方法。谢谢。

回答

0

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

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或将其打开到字节数组或将其添加到文件并将其发送到所需的接收器。

+0

谢谢你为这个答案,但如何从资源库中找到所选图像的URI? –

+0

我在switch语句的情况下onActivityResult方法的代码描述的requestCode等于您在触发的意图,那么你调用GetData()方法返回的意图为data.getData(提供的requestCode),以获得Uri。 –