添加短信签名功能

来源:互联网 发布:金科软件 医药 编辑:程序博客网 时间:2024/04/29 07:13
  • 先在设置-短信-基本设置面板中增加短信签名项,位置: vendor/mediatek/proprietary/packages/apps/Mms/res/xml/generalpreferences.xml,添加
    <Preference android:key="pref_key_message_signature"    android:title="@string/zuk_message_signature"    android:widgetLayout="@layout/zuk_preference_widget_forward"></Preference>

  • 然后要给该项Preference设置点击事件,点击后会弹出一个编辑Dialog,这里涉及数据持久化中的SharedPreferences知识
  • 位置:vendor/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/setting/SmsSingleRecipientSender.java
  • 导入的包:
    import android.content.SharedPreferences;import android.widget.EditText;import android.text.InputFilter;//续import android.app.AlertDialog;import android.content.DialogInterface.OnClickListener;//续
  • 定义的常量和声明的变量
    public static final String MESSAGE_SIANATURE="pref_key_message_signature";//这里把在xml布局文件中定义的key赋值给一个字符串常量,常量大写是编码规范private static final int MAX_EDITABLE_LENGTH=20;private Preference mMessageSignaturePref;//续pirvate AlertDialog mSignatureTextDialog;private EditText mSignatureText;
  • 对声明的变量mMessageSignaturePref进行初始化,初始化位置是setMessagePreferences()方法
    mMessageSignaturePref=(Preference)findPreference(MESSAE_SIGNATURE);
  • 给该Preference项设置点击事件,位置是onPreferenceTreeClick(PreferenceScreen preferenceScreen,Preference preference)方法
     }else if(preference==mMessageSignaturePref){        AlertDialog.Builder dialog=new AlertDialog.Builder(this);//建立一个AlertDialog.Builder对象        mSignatureText=new EditText(dialog.getContext());        //给EditText对象赋值,传入的参数是AlertDialog.Builder的Context,说明该EditText出现在弹出的AlertDialog中        //对EditText对象设置属性        mSignatureText.setHint(R.string.type_to_compose_text_enter_to_send);//提示用户键入信息        mSignatureText.computeScroll();//由父视图调用用来请求子视图根据偏移值 mScrollX,mScrollY重新绘制,还不是很懂        mSignatureText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(MAX_EDITABLE_LENGTH)});//续        //SharedPreferences pref=getSharedPreferences("signature",MODE_PRIVATE);        SharedPreferences pref=getsharedPreferences(MMS_PREFERENCE,MODE_PRIVATE);        //private static final string MMS_PREFERENCE="com.android.mms_preferences";        String gotSignatureText=pref.getString("signatureText","from ZUK");        //获取存储在SharedPreferences中键signatureText对应的值,默认(初始)值是from ZUK        mSignatureText.setText(gotSignatureText);//把得到的值显示在EditText栏中        nSignatureText.setTextColor(R.color.black);//给text设置颜色        mSignatureTextDialog=dialog.setIcon(R.drawable.ic_dialog_info_holo_light).setTitle(                 R.string.sms_signature_edit).setView(mSignatureText).setPositiveButton(                 R.string.OK,new PositiveButtonListener()).setNegativeButton(                R.string.Cancel,new NegativeButtonListener()).show();        //setView是把之前定义的EditText对象传入AlertDialog中,        // setPositiveButton需要传入ok键的名称和ok键的监听对象,这里的监听类是PositiveButtonListener,        // 该类需要实现接口android.content.DialogInterface.OnClickListener,在这个类中实现ok键的点击逻辑的实现。        // AlertDialog.builder对象调用show()方法会返回一个AlertDialog对象

  • Ok键和Cancel键的点击逻辑实现
     private class PositiveButtonListener implements OnClickListener{            public void onClick(DialogInterface dialog,int which){                String signatureString=mSignatureText.getText().toString();                //获取EditText对象中的文本内容并转换为字符串形式                //存储数据的操作可以开启一个新线程来完成,减少主线程阻塞                new Thread(new Runnable(){                    public void run(){                        //SharedPreferences.Editor editor=getSharedPreferences("signature",MODE_PRIVATE).edit();                        SharedPreferences.Editor editor=PreferenceManager.getDefaultSharedPreferences(                                GeneralPreferenceActivity.this).edit();                        //这样更规范,和整体代码编写保持统一,导入android.preference.PreferenceManager                        editor.putString("signatureText",signatureString);                        editor.commit();  }                    //以上是向SharedPreferences存储内容的操作                }).start();            }        }
           mMessageText=addSignature.toString();//再由StringBuffer类型转换为String类型        private class NegativeButtonListener implements OnClickListener{            public void onClick(DialogInterface dialog,int which){                dialog.dismiss();//弹出的dialog消失            }        }



  • 最后要在实现发送短信功能的类中通过SharedPreferences获取在设置中存储的内容,添加在发送的短信中,这样我们就完成了短信签名功能
  • 位置:vendor/mediatek/propietary/packages/apps/Mms/src/com/android/mms/transaction/SmsSingleRecipientSender.java
  • 在方法sendMessage方法中添加如下内容
    private static final String MMS_PREFERENCE=“com.android.mms_preferences";        StringBuffer addSignature =new StringBuffer(mMessageText);        //mMessageText是在类SmsSingleRecipientSender继承的类        //SMSMessageSender中定义的String类型常量,由于我们要对mMessageText进行修改,        // 因此要去掉final修改,改常量为变量        // SharedPreferences pref=mContext.getSharedPreferences("signature",0);        SharedPreferences pref=mContext.getSharedPreferences(MMS_PREFERENCE,0);        //需要导入android.content.SharedPreferrences        //这里需要强调,mContext是继承的类SMSMessageSender中定义的Context对象,        // 这里如果写成SharedPreferences pref=getSharedPreferences("signature",0);则会报错,        // 提示方法getSharedPreferences没有在该类中定义,原因是getSharedPreferences是Context类中定义的方法,        // 只有在继承了Context的类中才能直接使用,例如Activity中        String gotSignatureText=pref.getString("signatureText","");        if(gotSignatureText!=null && !gotSignatureText.equals("")){            //如果gotSignatureText不为空并且也不为空字符串            // 这里需要强调判断String对象是否和某字符串相等要用equals方法,gotSignatureText!=null是不对的            addSignature.append("\r\n"+gotSignatureText);// 在尾部添加签名内容            } 

0 0
原创粉丝点击