android如何监听粘贴板内容

来源:互联网 发布:图片制作拼图软件 编辑:程序博客网 时间:2024/06/05 23:42

android如何监听粘贴板内容

最近项目做监听粘贴板弹窗的功能小记一下。其实思路很简单,写一个服务在后台跑,通过ClipboardManager服务来监听粘贴板。废话绍少说上代码:

~~~java
public class PasteCopyService extends Service {
ClipboardManager clipboardManager;

private String Tag = "pastecopy";private WindowManager wm;private Window mWindow;@Overridepublic void onCreate() {    super.onCreate();    BabytreeLog.e(Tag,"onCreate");    clipboardManager =(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);    wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);    final WindowManager.LayoutParams params = new WindowManager.LayoutParams();    params.type =  WindowManager.LayoutParams.TYPE_TOAST;    params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;    params.width = TimeApplication.screenWidth;    params.gravity = Gravity.TOP;    params.height = 200;    params.x = 0;    params.y = 0;    final LayoutInflater mInflater = LayoutInflater.from(this);    final View view = mInflater.inflate(R.layout.window_paste_copy,null);    view.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            if(AvoidLoginUtil.isLogin(PasteCopyService.this)){                Intent intent = new Intent(PasteCopyService.this, MainActivity.class);                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);                startActivity(intent);            }            wm.removeView(view);        }    });    clipboardManager.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {        @Override        public void onPrimaryClipChanged() {            wm.addView(view,params);            view.post(new Runnable() {                @Override                public void run() {                }            });            Toast.makeText(PasteCopyService.this,"测试",Toast.LENGTH_SHORT).show();        }    });}@Overridepublic void onDestroy() {    BabytreeLog.e(Tag,"onDestroy");    super.onDestroy();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {    BabytreeLog.e(Tag,"onStartCommand");    return super.onStartCommand(intent, flags, startId);}@Nullable@Overridepublic IBinder onBind(Intent intent) {    return null;}

}
~~~

为了弹窗要在Manifest上加入权限

~xml

~

这些代码并不是真正的项目里的实现的代码,好多ui,和动画,还有于业务上有关系的代码都没有贴上来。其实并没有什么难度,只是一个思路而已。通过ClipboardManager的OnPrimaryClipChangedListener可以监听到剪贴板的动作。如果剪贴板有新的粘贴内容便可以执行onPrimaryClipChanged中的内容。这里有些细节,WindowManager.LayoutParams.TYPE_TOAST这样可以避开某些手机的弹出提醒。经过测试如果服务在后台没有杀死可以成功弹起弹窗在任何界面。
0 0
原创粉丝点击