最近在做一个分享得红包活动,要求监听剪贴板的数据,当剪贴板含有特定的活动信息时,跳转到对应的活动页面。
传统的监听剪贴板数据的方式是在ClipboardManager
中添加OnPrimaryClipChangedListener
来实现监听剪贴板数据的改动,而我们的场景是用户在社交软件中复制文字,打开我们App的时候跳转指定活动页面,这里可以取个巧,直接在App回到前台的时候去读取剪贴板数据。
判断App回到前台目前有好几种方式,这里有个判断程序是否在后台的库。我选的是通过在Application中注册ActivityLifecycleCallbacks
来监听Activity状态来判断程序是否在后台,直接上代码:
// Application onCreate() 中注册
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
private int activityCount;
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
activityCount++;
if (activityCount == 1) { // 应用回到前台
// 获取剪贴板数据
String content = null;
ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
try {
ClipData data = cm.getPrimaryClip();
ClipData.Item item = data.getItemAt(0);
content = item.getText().toString();
} catch (Exception e) {
e.printStackTrace();
}
if (content != null) {
// 执行我们的操作
...
// 清除剪贴板
ClipData clip = ClipData.newPlainText("", "");
cm.setPrimaryClip(clip);
}
}
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
activityCount--;
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
});