111.归属地悬浮框的拖拽
来源:互联网 发布:11 选5遗漏数据查询 编辑:程序博客网 时间:2024/04/28 03:56
params.type = WindowManager.LayoutParams.TYPE_TOAST响应TOAST
params.type = WindowManager.LayoutParams.TYPE_PHONE;响应打电话,电话窗口,电话窗口适合电话交互
占用打电话的窗口,需要权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>在
View响应点击事件更新view的坐标 view.setOnTouchListener
AddressActivity.java
package com.ldw.safe.service;import android.app.Service;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.graphics.PixelFormat;import android.os.IBinder;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;import android.view.Gravity;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.view.WindowManager;import android.widget.TextView;import com.ldw.safe.R;import com.ldw.safe.db.dao.AddressDao;/* * 来电提醒的服务 */public class AddressService extends Service {private TelephonyManager tm;private MyListener listener;private OutCallReceiver receiver;private WindowManager mWM;private int startX;private int startY;//private TextView view;private View view;private SharedPreferences mPref;@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onCreate(){super.onCreate();//读取样式的配置参数mPref = getSharedPreferences("config", MODE_PRIVATE);tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);listener = new MyListener();tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);//监听打电话的状态receiver = new OutCallReceiver();IntentFilter filter = new IntentFilter(Intent.ACTION_NEW_OUTGOING_CALL);registerReceiver(receiver, filter);//动态注册广播}class MyListener extends PhoneStateListener{//监听电话状态的变化@Overridepublic void onCallStateChanged(int state, String incomingNumber){//switch(state){//电话铃声响起case TelephonyManager.CALL_STATE_RINGING:System.out.println("CALL_STATE_RINGING");//获取来电的号码归属地String address = AddressDao.getAddress(incomingNumber);//Toast的形式弹出号码归属地//Toast.makeText(AddressService.this, address, Toast.LENGTH_LONG).show();//自定义的Toast显示号码归属地showToast(address);break;//监听电话闲置的事件case TelephonyManager.CALL_STATE_IDLE://关闭自定义的Toast显示if(mWM != null && view != null){//挂断电话的时候,移除窗体mWM.removeView(view);}break;default:break;}super.onCallStateChanged(state, incomingNumber);}}/* * 监听去电 的广播接收者,添加权限PROCESS_OUTGOING_CALLS */class OutCallReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {//获取到来电的号码String number = getResultData();//获取到号码的归属地String address = AddressDao.getAddress(number);//Toast的形式弹出号码归属地//Toast.makeText(context, address, Toast.LENGTH_LONG).show();//自定义的Toast显示号码归属地showToast(address);}} @Override public void onDestroy(){ super.onDestroy(); //关闭服务,停止来电监听 tm.listen(listener, PhoneStateListener.LISTEN_NONE); //注销广播 unregisterReceiver(receiver); } /* * 自定义归属地显示浮窗,取代Toast,需要权限SYSTEM_ALERT_WINDOW */ private void showToast(String text){ mWM = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE); //获取屏幕的宽度和高度 final int winWidth = mWM.getDefaultDisplay().getWidth(); final int winHeight = mWM.getDefaultDisplay().getHeight(); final WindowManager.LayoutParams mParams = new WindowManager.LayoutParams(); final WindowManager.LayoutParams params = mParams; params.height = WindowManager.LayoutParams.WRAP_CONTENT; params.width = WindowManager.LayoutParams.WRAP_CONTENT; params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON; params.format = PixelFormat.TRANSLUCENT; params.type = WindowManager.LayoutParams.TYPE_PHONE; //将重心位置设置成左上方(0,0),默认实在重心位置 params.gravity = Gravity.LEFT + Gravity.TOP; params.setTitle("Toast"); //获取到之前归属地显示的坐标 int lastX = mPref.getInt("lastX", 0); int lastY = mPref.getInt("lastY", 0); //params.x和 params.y是设置基于左上方的偏移量 params.x = lastX; params.y = lastY; //原始的view显示 //view = new TextView(this); //自定义的view显示 view = View.inflate(this, R.layout.toast_address, null); //初始化样式 int[] bgs = new int[] { R.drawable.call_locate_white,R.drawable.call_locate_orange, R.drawable.call_locate_blue,R.drawable.call_locate_gray, R.drawable.call_locate_green }; //获取保存的样式数据int style = mPref.getInt("address_Style", 0);//设置样式view.setBackgroundResource(bgs[style]); TextView tvAddress= (TextView) view.findViewById(R.id.tv_address); tvAddress.setText(text); //tvAddress.setTextColor(Color.BLUE); //将view添加到窗体 mWM.addView(view, params); //view响应点击事件 view.setOnTouchListener(new OnTouchListener(){@Overridepublic boolean onTouch(View v, MotionEvent event) {System.out.println("onTouch...");switch(event.getAction()){case MotionEvent.ACTION_DOWN://获取起始点在屏幕中的坐标startX = (int) event.getRawX(); startY = (int) event.getRawY(); break;case MotionEvent.ACTION_MOVE://获取结束点的坐标int endX = (int) event.getRawX();int endY = (int) event.getRawY();//计算偏移量int dx = endX - startX;int dy = endY - startY;//更新选民付出的位置params.x += dx;params.y += dy;//窗口x,y的最小最大的范围的限制,防止坐标越界if(params.x < 0){params.x = 0;}if(params.y < 0){params.y = 0;}if(params.x > winWidth - view.getWidth()){params.x = winWidth - view.getWidth();}if(params.y > winHeight - view.getHeight()){params.y = winHeight - view.getHeight();}//窗口更新位置mWM.updateViewLayout(view, params);System.out.println("params.x" + params.x + "params.y" +params.y);// 重新初始化起点坐标startX = (int) event.getRawX();startY = (int) event.getRawY();break;case MotionEvent.ACTION_UP:// 编辑保存记录坐标点Editor edit = mPref.edit();edit.putInt("lastX", params.x);edit.putInt("lastY", params.y);edit.commit();break;}return true;} }); }}
0 0
- 111.归属地悬浮框的拖拽
- Android之--电话归属地的悬浮框的…
- 105.实现自定义归属地提示框的拖拽1
- 106.实现自定义归属地提示框的拖拽2
- 号码归属地的查询
- 手机号的归属地查询
- 手机归属地查询的部分代码
- flex 查查你的号码归属地
- 查询ip归属地的shell脚本
- 电话归属地查询的实现
- 获取手机号码 归属地的接口
- 判断手机号码归属地的正则表达式
- 31号码归属地查询的原理
- 32号码归属地代码的实现
- 33号码归属地的完善
- 34查询号码归属地的优化
- 37来电号码归属地的显示
- 41移动归属地的位置
- WeakHashMap
- 《MySQL高效编程》学习笔记--MySQL文件读取操作及使用
- 110.WindowManager.LayoutParams.type属性
- IdentityHashMap
- ConcurrentHashMap
- 111.归属地悬浮框的拖拽
- LinkedHashMap
- C++改变光标位置的函数
- Unity3D 脚本模板插件
- Mac Book中设置Java环境变量
- 513. Find Bottom Left Tree Value | LeetCode
- mysql 锁细节
- macbook在mamp上php7.0.x和php5.6.x安装拓展redis
- NAT123