下面列出了android.content.ClipboardManager#addPrimaryClipChangedListener ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* 监听剪切板
*/
private void listenClipboard() {
final ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
@Override
public void onPrimaryClipChanged() {
if (BigBangActivity.isShowing) {
//是BigBang复制的,复制结束了就发广播关闭
sendBroadcast(new Intent(Constant.FINISH_BIGBANG_ACTIVITY));
} else {
Intent intent = new Intent(getApplication(), BigBangActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(Constant.CLIPBOARD_TEXT, clipboard.getText().toString());
startActivity(intent);
}
}
});
}
@Override
public void onCreate() {
Log.v(MyUtil.PACKAGE_NAME, "onCreate CBService");
mContext = this;
mHandler = new Handler();
preference = PreferenceManager.getDefaultSharedPreferences(this);
readPreference();
notificationManager = NotificationManagerCompat.from(this);
db = Storage.getInstance(this.getBaseContext());
clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
clipboardManager.addPrimaryClipChangedListener(listener);
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
Log.w(MyUtil.PACKAGE_NAME, "Not support JobScheduler");
} else {
bindJobScheduler();
}
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
if (textCapture_LOG)
Log.d(TAG, "onStartCommand: ");
toggleService = true;
final ArrayList<String> copiedDataArray = new ArrayList<>();
clipboardManager.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
@Override
public void onPrimaryClipChanged() {
if (textCapture_LOG)
Log.d(TAG, "onPrimaryClipChanged: before changing");
if(toggleService) {
if (textCapture_LOG)
Log.d(TAG, "onPrimaryClipChanged: ");
final ClipData clipData = clipboardManager.getPrimaryClip();
if (clipData.getDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)
|| clipData.getDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_HTML)
|| clipData.getDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_INTENT)) {
ClipData.Item item = clipData.getItemAt(0);
String thisText = item.getText().toString();
String sb = "";
copiedDataArray.add(thisText);
for (String text : copiedDataArray) {
sb += text + "\n";
}
ClipData copiedClip = ClipData.newPlainText("copiedClip", sb);
clipboardManager.removePrimaryClipChangedListener(this);
clipboardManager.setPrimaryClip(copiedClip);
clipboardManager.addPrimaryClipChangedListener(this);
Toast.makeText(TextCaptureService.this, "Multi Copied", Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(TextCaptureService.this, "only text is allowed", Toast.LENGTH_SHORT).show();
}
}
});
return super.onStartCommand(intent, flags, startId);
}
private void readyClipboard(ClipboardManager.OnPrimaryClipChangedListener listener) {
ClipboardManager clipboardManager = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
if (null != mPrimaryClipChangedListener) {
clipboardManager.removePrimaryClipChangedListener(mPrimaryClipChangedListener);
}
mPrimaryClipChangedListener = listener;
clipboardManager.addPrimaryClipChangedListener(mPrimaryClipChangedListener);
}
/**
* 开始监听剪贴板
*/
public static void startListenClipboard(final Context context) {
final ClipboardManager clipboard = (ClipboardManager) context.
getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
@Override
public void onPrimaryClipChanged() {
// XpLog.i("onPrimaryClipChanged");
//获取剪贴板内容,先判断该内容是否为空
if (clipboard.hasPrimaryClip()) {
ClipData clipData = clipboard.getPrimaryClip();
int count = clipData.getItemCount();
for (int i = 0; i < count; ++i) {
ClipData.Item item = clipData.getItemAt(i);
CharSequence str = item
.coerceToText(context);
//因为复制历史记录里面某一条文字到剪贴板的时候,也会导致剪贴板内容变动,此处避免 添加重复内容到剪贴板历史
if (!clipboardData.contains(str.toString())) {
clipboardData.add(str.toString());
}
}
}
}
});
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_clip_board);
mClipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
findViewById(R.id.copy).setOnClickListener(this);
findViewById(R.id.paste).setOnClickListener(this);
copyEdit = findViewById(R.id.copyEdit);
pasteEdit = findViewById(R.id.pasteEdit);
mClipboardManager.addPrimaryClipChangedListener(() -> Log.e(TAG, "onPrimaryClipChanged: " ));
}
@Override
public void onCreate() {
super.onCreate();
AppLog.i(LOGTAG, "onCreate");
mClipManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
mClipManager.addPrimaryClipChangedListener(this);
mTranslator.registerOnTranslateResultListener(this);
}
private Clipboard() {
mContext = ContextUtils.getApplicationContext();
mClipboardManager =
(ClipboardManager) ContextUtils.getApplicationContext().getSystemService(
Context.CLIPBOARD_SERVICE);
mClipboardManager.addPrimaryClipChangedListener(this);
}
@Override
public void onCreate() {
super.onCreate();
// TODO: Show an ongoing notification when this service is running.
mHistoryFile = new File(getExternalFilesDir(null), FILENAME);
mClipboardManager =
(ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
mClipboardManager.addPrimaryClipChangedListener(
mOnPrimaryClipChangedListener);
}
@Override
protected void processLogic(Bundle savedInstanceState) {
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}
//初始化监听剪贴板
final ClipboardManager manager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
hasPrimaryClip = new ClipboardManager.OnPrimaryClipChangedListener() {
@Override
public void onPrimaryClipChanged() {
long now = System.currentTimeMillis();
if (now - previousTime < 5000) {
return;
}
previousTime = now;
if (manager == null || !manager.hasPrimaryClip()) {
return;
}
//如果是文本信息
if (manager.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)
|| manager.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_HTML)) {
ClipData cdText = manager.getPrimaryClip();
ClipData.Item item = cdText.getItemAt(0);
//此处是TEXT文本信息
if (item.getText() != null) {
final String t = item.getText().toString();
Snackbar.make(webViewT, "剪贴板被使用,是否撤销内容", Snackbar.LENGTH_LONG)
.setAction("撤销", new View.OnClickListener() {
@Override
public void onClick(View view) {
Helper.copyToClipboard(getContext(), text);
}
}).addCallback(new Snackbar.Callback() {
@Override
public void onDismissed(Snackbar transientBottomBar, int event) {
text = t;
super.onDismissed(transientBottomBar, event);
}
}).show();
}
}
}
};
if (manager != null) {
manager.addPrimaryClipChangedListener(hasPrimaryClip);
}
}
@Override
public void onCreate() {
pm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
pm.addPrimaryClipChangedListener(listener);
}
private void startClipboardMonitoring() {
clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
if (clipboardManager != null) {
clipboardManager.addPrimaryClipChangedListener(onPrimaryClipChangedListener = new ClipboardManager.OnPrimaryClipChangedListener() {
@Override
public void onPrimaryClipChanged() {
Log.d("PGPClipperService", "Clipboard data change detected!");
// get current clipboard data to string
String currentData;
if (clipboardManager.hasPrimaryClip() && Objects.requireNonNull(clipboardManager.getPrimaryClipDescription()).hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) {
try {
currentData = Objects.requireNonNull(clipboardManager.getPrimaryClip()).getItemAt(0).getText().toString();
} catch (NullPointerException e) {
// should not happen since clipboard contains text, but returned null.
// best effort String parsing
try {
currentData = clipboardManager.getPrimaryClip().getItemAt(0).coerceToText(PGPClipperService.this).toString();
} catch (Exception e2) {
// best attempt failed... return this method
return;
}
}
} else {
return;
}
// tidy once
currentData = PGPBlockDetector.pgpInputTidy(currentData);
// check if this contains ASCII armored PGP data
if (PGPBlockDetector.isBlockPresent(currentData)) {
// notify user
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Intent intentToLaunchWhenNotificationClicked = new Intent(getApplicationContext(), PGPClipperService.class);
intentToLaunchWhenNotificationClicked.putExtra(TRY_DECRYPT, true);
intentToLaunchWhenNotificationClicked.putExtra(DATA, currentData);
PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 0, intentToLaunchWhenNotificationClicked, PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_UPDATE_CURRENT);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = getString(R.string.channel_name);
String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
channel.setDescription(description);
// Register the channel with the system; you can't change the importance
// or other notification behaviors after this
notificationManager.createNotificationChannel(channel);
}
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(getApplicationContext(), CHANNEL_ID)
.setSmallIcon(R.drawable.ic_noti)
.setTicker(getString(R.string.NotificationTickerText))
.setContentTitle(getString(R.string.NotificationTitleText))
.setContentText(getString(R.string.NotificationContentText))
.setDefaults(Notification.DEFAULT_LIGHTS)
.setContentIntent(pendingIntent)
.setPriority(NotificationCompat.PRIORITY_MAX)
.setWhen(System.currentTimeMillis())
.setAutoCancel(true);
notificationManager.notify(8591274, notificationBuilder.build());
}
}
});
}
}