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這樣可以避開某些手機的彈出提醒。經過測試如果服務在後台沒有殺死可以成功彈起彈窗在任何介面。