Android自定义短信接受弹框提示
来源:互联网 发布:nba球队数据 编辑:程序博客网 时间:2024/04/29 11:52
(1)开启一个service,注册一个广播接收器,在onReceive中监听短信接受
(2)新建一个窗口,显示自定义布局
public class SmsService extends Service implements View.OnClickListener { private SmsReceiver smsReceiver; //发件人号码 private String smsPhone; //短信内容 private String smsContent; //窗口管理 private WindowManager wm; //布局参数 private WindowManager.LayoutParams layoutparams; //View private DispatchLinearLayout mView; private TextView tv_phone; private TextView tv_content; private Button btn_send_sms; private HomeWatchReceiver mHomeWatchReceiver; public static final String SYSTEM_DIALOGS_RESON_KEY = "reason"; public static final String SYSTEM_DIALOGS_HOME_KEY = "homekey"; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); init(); } //初始化 private void init() { L.i("init service"); //动态注册 smsReceiver = new SmsReceiver(); IntentFilter intent = new IntentFilter(); //添加Action intent.addAction(StaticClass.SMS_ACTION); //设置权限 intent.setPriority(Integer.MAX_VALUE); //注册 registerReceiver(smsReceiver, intent); mHomeWatchReceiver = new HomeWatchReceiver(); IntentFilter intentFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); registerReceiver(mHomeWatchReceiver, intentFilter); } @Override public void onDestroy() { super.onDestroy(); L.i("stop service"); //注销 unregisterReceiver(smsReceiver); unregisterReceiver(mHomeWatchReceiver); } //短信广播 public class SmsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (StaticClass.SMS_ACTION.equals(action)) { //获取短信内容返回的是一个Object数组 Object[] objs = (Object[]) intent.getExtras().get("pdus"); //遍历数组得到相关数据 for (Object obj : objs) { //把数组元素转换成短信对象 SmsMessage sms = SmsMessage.createFromPdu((byte[]) obj); //发件人 smsPhone = sms.getOriginatingAddress(); //内容 smsContent = sms.getMessageBody(); L.i("短信的内容:" + smsPhone + ":" + smsContent); showWindow(); } } } } //窗口提示 private void showWindow() { //获取系统服务 wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE); //获取布局参数 layoutparams = new WindowManager.LayoutParams(); //定义宽高 layoutparams.width = WindowManager.LayoutParams.MATCH_PARENT; layoutparams.height = WindowManager.LayoutParams.MATCH_PARENT; //定义标记 layoutparams.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH; //定义格式 layoutparams.format = PixelFormat.TRANSLUCENT; //定义类型 layoutparams.type = WindowManager.LayoutParams.TYPE_PHONE; //加载布局 mView = (DispatchLinearLayout) View.inflate(getApplicationContext(), R.layout.sms_item, null); tv_phone = (TextView) mView.findViewById(R.id.tv_phone); tv_content = (TextView) mView.findViewById(R.id.tv_content); btn_send_sms = (Button) mView.findViewById(R.id.btn_send_sms); btn_send_sms.setOnClickListener(this); //设置数据 tv_phone.setText("发件人:" + smsPhone); L.i("短信内容:" + smsContent); tv_content.setText(smsContent); //添加View到窗口 wm.addView(mView, layoutparams); mView.setDispatchKeyEventListener(mDispatchKeyEventListener); } private DispatchLinearLayout.DispatchKeyEventListener mDispatchKeyEventListener = new DispatchLinearLayout.DispatchKeyEventListener() { @Override public boolean dispatchKeyEvent(KeyEvent event) { //判断是否是按返回键 if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { L.i("我按了BACK键"); if (mView.getParent() != null) { wm.removeView(mView); } return true; } return false; } }; @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_send_sms: sendSms(); //消失窗口 if (mView.getParent() != null) { wm.removeView(mView); } break; } } //回复短信 private void sendSms() { Uri uri = Uri.parse("smsto:" + smsPhone); Intent intent = new Intent(Intent.ACTION_SENDTO, uri); //设置启动模式 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra("sms_body", ""); startActivity(intent); } //监听Home键的广播 class HomeWatchReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) { String reason = intent.getStringExtra(SYSTEM_DIALOGS_RESON_KEY); if (SYSTEM_DIALOGS_HOME_KEY.equals(reason)) { if (mView.getParent() != null) { wm.removeView(mView); } } } } }}
自定义布局
public class DispatchLinearLayout extends LinearLayout { private DispatchKeyEventListener dispatchKeyEventListener; public DispatchLinearLayout(Context context, AttributeSet attrs) { super(context, attrs); } public DispatchLinearLayout(Context context) { super(context); } public DispatchLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public DispatchKeyEventListener getDispatchKeyEventListener() { return dispatchKeyEventListener; } public void setDispatchKeyEventListener(DispatchKeyEventListener dispatchKeyEventListener) { this.dispatchKeyEventListener = dispatchKeyEventListener; } //接口 public static interface DispatchKeyEventListener { boolean dispatchKeyEvent(KeyEvent event); } @Override public boolean dispatchKeyEvent(KeyEvent event) { //如果不为空 说明调用了 去获取事件 if (dispatchKeyEventListener != null) { return dispatchKeyEventListener.dispatchKeyEvent(event); } return super.dispatchKeyEvent(event); }}
权限<uses-permission android:name="android.permission.RECEIVE_SMS" />
0 0
- Android自定义短信接受弹框提示
- android中级 ---接受短信
- Android-短信弹窗提示
- android接受短信的BroadcastReceiver
- Android短信Mms接受流程
- android短信发送和接受
- android 发送短信和接受短信模块
- Android 接受短信和发送短信
- Android自定义提示框
- Android开发之短信接受教程
- Android中短信发送与接受
- android 短信管理(获取接受到短信的消息)
- Android监听发送短信和接受短信的事件
- android 短信管理(获取接受到短信的消息)
- Android中短信的接受广播和短信的解析
- android 自定义信息提示框
- android 自定义提示框Dialog
- Android上的文本/数据短信(发送/接受/拦截)
- MPLS-VPM-BGP
- 使用ssh key远程登录Linux
- angularjs-http服务
- 基于DDD的.NET开发框架ABP实例,多租户 (Sass)应用程序,采用.NET MVC, Angularjs, EntityFramework-介绍
- 我质疑自己是否适合做一名程序员
- Android自定义短信接受弹框提示
- Android Studio 去掉状态栏和去掉标题栏
- 最全Java知识点
- Perl进程——exec system qx//
- openstack 管理三十六
- NAT
- Struts2接收JSP批量提交数据
- Tomcat 多实例部署脚本
- 学习Java的21个技术点