Servicio – escucha del portapapeles android
Necesito un servicio simple (que se ejecutará en segundo plano), cuando el usuario copia algo desde el navegador o sms, etc, habrá un brindis que muestra ese texto.
ejemplo:
- Gancho del portapapeles a la web de acciones de Android broswer
- ¿Hay una manera de copiar desde el portapapeles en android en terminal?
- GetPrimaryClip () devuelve ClipData {text / plain {NULL}}
- OnPrimaryClipChangedListener se llama varias veces
- Borrar TODAS las entradas del portapapeles
Este servicio debe ejecutarse en android 2.1 y posteriores.
Hoy (desde las 10:35 hasta la actualidad [11:11 PM]) He estado buscando en Internet y probado varios códigos, pero hasta ahora no he llegado a una conclusión.
Algunos usuarios en respuesta a preguntas como esta sugirieron que el uso del proyecto (mi-clips) . Consigo esto, usted puede descargar esto . Pero este proyecto es complejo y estoy confundido.
¿Alguien puede mostrarme un ejemplo muy simple, por favor? gracias
Editar:
Esta aplicación es simple ejecutar en el sistema operativo de fondo y. Cuando el usuario no abra esta aplicación y copie cualquier texto desde el navegador o sms, etc., esta aplicación estará activa y mostrará un toast
como este: You copy this: ...
- Establecer texto y obtener texto del portapapeles
- Selección de texto de Android en la vista web
- Botón para copiar el valor de una cadena al portapapeles
- Código de portapapeles de Android que funciona en todos los niveles de API
- Android Copiar y Pegar con TextView
- ¿Hay alguna manera de escribir en el portapapeles desde javascript, en el navegador android?
- Pegar desde el portapapeles en Android
- Cómo copiar imágenes / archivos al portapapeles en android? Cualquier método o pasos alternativos para obtener este
La forma en que lo hice fue:
final ClipboardManager clipboard = (ClipboardManager) this.getSystemService(Context.CLIPBOARD_SERVICE); clipboard.addPrimaryClipChangedListener( new ClipboardManager.OnPrimaryClipChangedListener() { public void onPrimaryClipChanged() { String a = clipboard.getText().toString(); Toast.makeText(getBaseContext(),"Copy:\n"+a,Toast.LENGTH_LONG).show(); } });
Hágalo de esta manera sin servicio, agregue a manifiesto o cualquier cosa, abra su aplicación primero, luego ciérrela y copie el texto desde cualquier lugar para copiar y aparecer en su aplicación.
Para el portapapeles del monitor en androide usted necesita un servicio para el portapapeles de la supervisión y este servicio se debe definir en manifiesto. Su servicio de tablilla está aquí
Y manifiesto se define en el siguiente
<service android:name=".service.ClipboardMonitorService" android:label="Clipboard Monitor" android:exported="false"/>
Esto es lo que funciona para mí.
En primer lugar, la emisión:
@Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { ComponentName service = context.startService( new Intent(context, ClipboardMonitor.class)); if (service == null) { Log.e("TAG", "Can't start service"); } } else { Log.e("TAG", "Recieved unexpected intent " + intent.toString()); } }
Y entonces este es el servicio
private MonitorTask mTask = new MonitorTask(); private ClipboardManager mCM; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { mCM = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); mTask.start(); } @Override public void onDestroy() { mTask.cancel(); } @Override public void onStart(Intent intent, int startId) { } /** * Monitor task: monitor new text clips in global system clipboard and * new image clips in browser download directory */ private class MonitorTask extends Thread { private volatile boolean mKeepRunning = false; private String mOldClip = null; public MonitorTask() { super("ClipboardMonitor"); } /** Cancel task */ public void cancel() { mKeepRunning = false; interrupt(); } @Override public void run() { mKeepRunning = true; while (true) { doTask(); if (!mKeepRunning) { break; } } } private void doTask() { if (mCM.hasText()) { String newClip = mCM.getText().toString(); if (!newClip.equals(mOldClip)) { mOldClip = newClip; // Toast.makeText(getApplicationContext(), "" + newClip.toString(), Toast.LENGTH_SHORT).show(); Log.i("TAG", "new text clip inserted: " + newClip.toString()); } } }
Además, los permisos:
<uses-permission android:name="android.permission.GET_CLIPS" /> <uses-permission android:name="android.permission.READ_CLIPS" /> <uses-permission android:name="android.permission.WRITE_CLIPS" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <service android:name=".ClipboardMonitor" /> <receiver android:name=".ClipboardMonitorStarter"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>
En primer lugar, debe agregar estos permisos a AndroidManifest:
<uses-permission android:name="android.permission.GET_CLIPS" /> <uses-permission android:name="android.permission.READ_CLIPS" /> <uses-permission android:name="android.permission.WRITE_CLIPS" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
A continuación, debe agregar un servicio como este:
public class Clipboard extends Service { private ClipboardManager mCM; IBinder mBinder; int mStartMode; @Override public int onStartCommand(Intent intent, int flags, int startId) { mCM = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); mCM.addPrimaryClipChangedListener(new OnPrimaryClipChangedListener() { @Override public void onPrimaryClipChanged() { String newClip = mCM.getText().toString(); Toast.makeText(getApplicationContext(), newClip.toString(), Toast.LENGTH_LONG).show(); Log.i("LOG", newClip.toString() + ""); } }); return mStartMode; } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } }
Agrega este servicio en AndroidManifest:
<service android:name=".Clipboard" />
Iniciar servicio en MainActivity
startService(new Intent(this, Clipboard.class));
- Android Cómo verificar la instalación correcta de ACRA crash log
- Iniciar FragmentTransaction desde dentro de ArrayAdapter