- 先在设置-短信-基本设置面板中增加短信签名项,位置: 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;//续 private 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);// 在尾部添加签名内容 }
添加短信签名功能
最新推荐文章于 2024-05-15 09:00:00 发布