android - samsung - portapapeles huawei
Escuchar permanentemente los cambios del portapapeles. (1)
¡LO ENCONTRÉ!
He hecho esto, funciona perfectamente, y el proceso en la memoria solo consume 3 MB. Estoy publicando esto en caso de que alguien pueda necesitar algo similar.
Si hay algún error, por favor señálelos: D
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Calendar;
import android.app.Service;
import android.content.ClipData;
import android.content.ClipDescription;
import android.content.ClipboardManager;
import android.content.ClipboardManager.OnPrimaryClipChangedListener;
import android.content.Intent;
import android.os.IBinder;
public class CBWatcherService extends Service {
private final String tag = "[[ClipboardWatcherService]] ";
private OnPrimaryClipChangedListener listener = new OnPrimaryClipChangedListener() {
public void onPrimaryClipChanged() {
performClipboardCheck();
}
};
@Override
public void onCreate() {
((ClipboardManager) getSystemService(CLIPBOARD_SERVICE)).addPrimaryClipChangedListener(listener);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
File folder = new File(ClipboardCacheFolderPath);
// ClipboardCacheFolderPath is a predefined constant with the path
// where the clipboard contents will be written
if (!folder.exists()) { folder.mkdir(); }
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
private void performClipboardCheck() {
ClipboardManager cb = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
if (cb.hasPrimaryClip()) {
ClipData cd = cb.getPrimaryClip();
if (cd.getDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) {
try {
File folder = new File(ClipboardCacheFolderPath);
if (!folder.exists()) { folder.mkdir(); }
Calendar cal = Calendar.getInstance();
String newCachedClip =
cal.get(Calendar.YEAR) + "-" +
cal.get(Calendar.MONTH) + "-" +
cal.get(Calendar.DAY_OF_MONTH) + "-" +
cal.get(Calendar.HOUR_OF_DAY) + "-" +
cal.get(Calendar.MINUTE) + "-" +
cal.get(Calendar.SECOND);
// The name of the file acts as the timestamp (ingenious, uh?)
File file = new File(ClipboardCacheFolderPath + newCachedClip);
file.createNewFile();
BufferedWriter bWriter = new BufferedWriter(new FileWriter(file));
bWriter.write((cd.getItemAt(0).getText()).toString());
bWriter.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
Estoy creando una aplicación que lanzará un servicio capaz de escuchar los cambios del portapapeles.
Lo que realmente quiero es grabar (y escribirlo en el almacenamiento) todos los cambios en el portapapeles de forma permanente, de modo que cuando inicie mi aplicación pueda leer los archivos almacenados escritos por ese servicio. Esto significa que no hay necesidad de comunicación directa entre mi aplicación y el servicio y no hay necesidad de usar wakelocks para mantener el dispositivo en alto (ya que el portapapeles apenas cambia mientras el dispositivo está dormido).
Estoy usando un controlador para revisar el portapapeles de forma recurrente. Quiero saber cómo puedo implementar el ClipboardListener para verificar esos cambios.