杭州Android培训
达内杭州Android培训中心

13732203138

热门课程

在Android中如何实现自动回复短信

  • 时间:2018-06-20 16:30
  • 发布:杭州android中心
  • 来源:企业笔试题

如果可以在android手机中可以实现自动回复短信、挂电话的功能那该多好,这样在开会、上课的时候就不用关机了,直接一键开启多方便呀。猜你想知道它在代码中是如何实现的了,这就分享给你:

简单功能,配置一下ITelephoney,ITelephony这个接口不能直接用的。

需要先在src下新建包com.android.internal.telephony,在其中新建一个File,后缀为aidl(它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口),内容如下

package com.android.internal.telephony; interface ITelephony{ boolean endCall(); void answerRingingCall(); }

接下来就是一下MainActivity,代码如下。

package com.example.autoreply; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import java.lang.reflect.Method; import java.util.HashMap; import java.util.List; import com.android.internal.telephony.ITelephony; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.telephony.PhoneStateListener; import android.telephony.SmsManager; import android.telephony.TelephonyManager; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity { Button btn;//退出按钮 EditText et;//回复短信的内容编辑框 TextView tv;//拦截数量通知的显示 TelephonyManager tpm; SharedPreferences sp; int count = 0;//来电总数 int peo = 0;//来电的号码个数,跟来电总数有区别,这个不包括重复来电, String num;//存储来电号码 HashMap<String, String> numMap;//用来存储来电号码 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); // 注意顺序 setContentView(R.layout.activity_main); getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, // 注意顺序 R.layout.title); tv = (TextView) findViewById(R.id.textView1); et = (EditText) findViewById(R.id.editText1); btn = (Button) findViewById(R.id.button1); sp = this.getSharedPreferences("SP", MODE_PRIVATE); umMap = new HashMap<String, String>(); if(sp.getString("sms", null) != null){ et.setText(sp.getString("sms", "我现在正在上课,一会儿下课了联系你")); } tpm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);//获取电话通讯服务 tpm.listen(new MyPhoneStateListener(),PhoneStateListener.LISTEN_CALL_STATE);//给电话服务增加状态监听器,监听来电,通话,挂断等状态 btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Editor editor = sp.edit(); editor.putString("sms", et.getText().toString()); editor.commit();//这里是默认自动保存用户编辑过的回复短信内容的, } }); } class MyPhoneStateListener extends PhoneStateListener { @Override public void onCallStateChanged(int state, String incomingNumber) { um = incomingNumber; switch(state) { case TelephonyManager.CALL_STATE_IDLE: //空闲 break; case TelephonyManager.CALL_STATE_RINGING: //来电 endCall();//自动挂断 if(!numMap.containsKey(num)){//如果之前没有来电,把这个号码加入已经来电过的列表 sendMes(); umMap.put(num, null); peo ++; updateUi();//更新来电数目 } break; case TelephonyManager.CALL_STATE_OFFHOOK: //摘机(正在通话中) break; } } private void updateUi(){ if(count > 0){ tv.setVisibility(View.VISIBLE); } handler.sendEmptyMessage(0); // tv.setText("已拒接" + count + "个来电,共" + peo +"个人联系过您"); } private void endCall() { Class<TelephonyManager> c = TelephonyManager.class; try { Method getITelephonyMethod = c.getDeclaredMethod("getITelephony", (Class[]) null); getITelephonyMethod.setAccessible(true); ITelephony iTelephony = null; iTelephony = (ITelephony) getITelephonyMethod.invoke(tpm, (Object[]) null); iTelephony.endCall(); count ++; updateUi(); } catch (Exception e) { } } private void sendMes(){ //直接调用短信接口发短信 SmsManager smsManager = SmsManager.getDefault(); List<String> divideContents = smsManager.divideMessage(et.getText().toString()); for (String text : divideContents) { smsManager.sendTextMessage(num, null, text, null, null); } } } public Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { // 接收的内容 case 0: tv.setText("已拒接" + count + "个来电,共" + peo +"个人联系过您"); break; default: break; } }; }; }

上一篇:android培训之如何实现彻底组件化
下一篇:Android刘海屏适配方案是什么
选择城市和中心
贵州省

广西省

海南省