Android聊天应用程序表情符号的问题

时间:2016-01-12 06:22:57

标签: android android-layout android-fragments android-intent chat

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

  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();
}

3 个答案:

答案 0 :(得分:0)

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

检查docs:

此外,我找到了blog,它可能对您有所帮助。

答案 1 :(得分:0)

This Library是您实施Emojicons所需的全部内容。不要忘记将TextViewEditText分别更改为此图书馆的EmojiconTextViewEmojiconEditText

希望这有帮助。

答案 2 :(得分: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();
        }