2017-03-16 148 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。 –