我正在研究聊天应用程序。我已成功将文本作为消息发送给接收者,现在我想通过捕获或从库中选择将图像作为消息发送。 我曾经历过一些像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 :(得分: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或将其转换为字节数组或将其添加到将文件发送给所需的收件人。