1

我正在开发Android聊天应用程序。现在我想在聊天模块中发送表情符号。我如何在聊天应用程序中实现表情符号?请指导我这个应用程序。如果有这个应用程序的任何API,那么也建议我。谢谢Android聊天应用程序表情符号的问题

public void callAsynchronousTask() { 
    final Handler handler = new Handler(); 
    timer = new Timer(); 
    TimerTask doAsynchronousTask = new TimerTask() { 
     @Override 
     public void run() { 
      handler.post(new Runnable() { 
       public void run() { 
        try { 
         new GetSingleChat(Chat_Detail_Single.this).execute(friend_id); 

        } catch (NullPointerException e) { 

        } 
       } 
      }); 

     } 
    }; 
    timer.schedule(doAsynchronousTask, 1000, 1000); 

} 

@Override 
public void onClick(View v) { 

    switch (v.getId()) { 
     case R.id.btncamera: 
      Dialog_Manager.chooseImage(Chat_Detail_Single.this, "singlechat"); 
      break; 
     case R.id.img_back: 
      timer.cancel(); 
      finish(); 
      break; 
     case R.id.btnsend: 
      String message_ = edt_mes.getText().toString(); 
      if (message_.replace(" ", "").length() == 0) { 

      } else { 
       edt_mes.setText(""); 
       new Send_chat_message(Chat_Detail_Single.this).execute(SharedPref.getUserID(this), friend_id, "mes", message_); 

      } 
      break; 

    } 
} 
     public static void get_chat_data(List<Chat_prop> fetch_chat) { 
    MyCustomList.clear(); 
    MyCustomList.addAll(fetch_chat); 

    try { 
     if (adptor == null) { 

      adptor = new Single_Chat_Adap(activity, 
        MyCustomList); 
      Chat_Detail_Single.listView.setAdapter(adptor); 
      Chat_Detail_Single.listView.setSelection(MyCustomList 
        .size() - 1); 
      lastCount = MyCustomList.size(); 
     } else { 

      if (lastCount != MyCustomList.size()) { 
       lastCount = MyCustomList.size(); 
       adptor.notifyDataSetChanged(); 
       Chat_Detail_Single.listView 
         .setSelection(MyCustomList.size()); 

      } 


     } 
    } catch (NullPointerException e) { 

    } catch (Exception e) { 
     // TODO: handle exception 
    } 

} 
     @Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    try { 

     if (requestCode == Dialog_Manager.Gallery_Intent 
       && resultCode == RESULT_OK && data != null) { 

      File direct = new File(
        Environment.getExternalStorageDirectory() + "/Fun You"); 
      if (!direct.exists()) { 
       if (direct.mkdir()) 
        ; 
      } 
      long time = System.currentTimeMillis(); 
      capturepath1 = direct.getAbsolutePath() + "/" + time + ".jpg"; 
      File file = new File(capturepath1); 
      Uri outputFileUri = Uri.fromFile(file); 
      Uri selectedImage = data.getData(); 
      imagePath = getPath(selectedImage); 
      Intent cropIntent = new Intent("com.android.camera.action.CROP"); 
      Uri contentUri = selectedImage; 
      cropIntent.setDataAndType(contentUri, "image/*"); 
      cropIntent.putExtra("crop", "true"); 
      cropIntent.putExtra("aspectX", 1); 
      cropIntent.putExtra("aspectY", 1); 
      cropIntent.putExtra("outputX", 1000); 
      cropIntent.putExtra("outputY", 1000); 
      cropIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
      cropIntent.putExtra("return-data", true); 
      startActivityForResult(cropIntent, 3); 

     } else if (requestCode == Dialog_Manager.Camera_Intent 
       && resultCode == RESULT_OK) { 

      File direct = new File(
        Environment.getExternalStorageDirectory() + "/Fun You"); 
      if (!direct.exists()) { 
       if (direct.mkdir()) 
        ; 
      } 
      long time = System.currentTimeMillis(); 
      capturepath1 = direct.getAbsolutePath() + "/" + time + ".jpg"; 
      File file = new File(capturepath1); 
      Uri outputFileUri = Uri.fromFile(file); 
      File photos = new File(imagePath); 
      Uri selectedImage = Uri.fromFile(photos); 
      Intent cropIntent = new Intent("com.android.camera.action.CROP"); 
      Uri contentUri = selectedImage; 
      cropIntent.setDataAndType(contentUri, "image/*"); 
      cropIntent.putExtra("crop", "true"); 
      cropIntent.putExtra("aspectX", 1); 
      cropIntent.putExtra("aspectY", 1); 
      cropIntent.putExtra("outputX", 1000); 
      cropIntent.putExtra("outputY", 1000); 
      cropIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
      cropIntent.putExtra("return-data", true); 
      startActivityForResult(cropIntent, 3); 

     } else if (requestCode == 3) { 
      try { 
       Bitmap thumbnail = null; 
       Bundle extras = data.getExtras(); 
       if (extras != null) { 
        thumbnail = extras.getParcelable("data"); 
        Bitmap bm = thumbnail; 
        bm = ExtraMethods.decodeFile(capturepath1); 
        bm = ExifUtils.rotateBitmap(capturepath1, bm); 
        // new Uplaod_image().execute(capturepath1); 
        new Send_chat_message(Chat_Detail_Single.this).execute(SharedPref.getUserID(this), friend_id, "image", capturepath1); 
       } 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } catch (Exception e) { 
     Toast.makeText(getApplicationContext(), e + "", Toast.LENGTH_LONG) 
       .show(); 
    } 

} 
public String getPath(Uri uri) { 
    if (uri == null) { 
     return null; 
    } 
    String[] projection = {MediaStore.Images.Media.DATA}; 
    Cursor cursor = getContentResolver().query(uri, projection, null, null, 
      null); 
    if (cursor != null) { 
     int column_index = cursor 
       .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    } 
    return uri.getPath(); 
} 
+0

只是某个时候回来回答了在这里本应帮助你,问笔者也提到库太 – Veer3383

回答

0

没有具体的api可用于实现和发送emojis。您可以使用ImageSpan对象实现此目的。 TextViews和EditTexts使用Spanned/Spannable对象来存储输入的文本内容,而不仅仅是Java字符串。在这些Spanned/Spannable对象上,您可以为文本上的部分定义跨度,以修改这些部分显示的方式。所以你可以显示图像来代替某些部分。

检查docs:

另外,我发现一个blog,它可能对你有所帮助。

+0

感谢好吧,我会检查 –

+0

如果信息对您有帮助,请立即行动并接受答案。 :) –

0

This Library是您需要实施的所有Emojicons。请不要忘记分别将TextViewEditText更改为本图书馆的EmojiconTextViewEmojiconEditText

希望这会有所帮助。

+0

谢谢我可以如何在我的项目中添加这些库,因为我正在使用android studio –

+0

下载此库并将其作为模块导入到Android Studio中。 然后在你的项目的build.gradle文件,添加依赖这样的.. '{依赖编译 项目(“:ImportedProjectName”) }' – Mann

+0

它而进口模块,它是显示错误 - :指定gradle这个或Android的位置Eclipse项目 –

0

您需要在上传前编码表情符号。 这样你编码的表情符号UTF代码

try { 
       String mystring = URLEncoder.encode(strComments, HTTP.UTF_8); 
       param.add(new BasicNameValuePair("comment", mystring)); 

      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } 

解码

enter code here 


try { 
      String Title = URLDecoder.decode(comment, "UTF-8"); 
      holder.tvComment.setText(Title); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     }