Service – android clipboard Zuhörer

Ich brauche einen einfachen Service (der im Hintergrund läuft), wenn der Benutzer irgendetwas aus dem Browser oder sms etc. kopiert, gibt es einen Toast, der diesen Text zeigt.

Beispiel: Bildbeschreibung hier eingeben

Dieser Service muss auf Android 2.1 und später ausgeführt werden.

Heute (von 10:35 Uhr bis jetzt [11:11 PM]) Ich habe das Internet durchsucht und mehrere Codes getestet, aber bisher bin ich nicht zu einem Fazit gekommen.

Einige Benutzer in Reaktion auf Fragen wie diese schlug vor, dass die Verwendung der (meine-Clips) Projekt. Ich bekomme das, du kannst das herunterladen . Aber dieses Projekt ist komplex und ich bin verwirrt.

Kann mir jemand ein sehr einfaches Beispiel zeigen? Danke


Bearbeiten:

Dies ist eine einfache App auf Hintergrund und Dritte OS laufen. Wenn der Benutzer diese App nicht öffnet und kopiert jeden Text aus dem Browser oder SMS etc., wird diese App aktiv sein und zeigen einen toast wie folgt: You copy this: ...

  • GetPrimaryClip () gibt ClipData {text / plain {NULL} zurück
  • Wie Kopieren von Text in Clip-Board in Android?
  • Android nach dem Neustart des Telefons aus der Zwischenablage einfügen
  • Starten Sie die Zwischenablageänderungen dauerhaft
  • Android kopieren / einfügen aus dem Clipboard Manager
  • 4 Solutions collect form web for “Service – android clipboard Zuhörer”

    Wie ich es gemacht habe:

     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(); } }); 

    Tu es auf diese Weise ohne Service, füge man manifest oder irgendetwas hinzu, öffne einfach deine App und schließe es dann, und kopiere den Text von irgendwo, um zu kopieren und in deiner App zu erscheinen

    Für Monitor Zwischenablage in Android benötigen Sie einen Service für die Überwachung der Zwischenablage und dieser Dienst sollte in Manifest definieren. Ihr Clip Board Service ist hier

    https://github.com/twaddington/Android-Clipboard-Monitor/blob/master/src/com/example/clipboardmonitor/service/ClipboardMonitorService.java

    Und manifest definieren ist in der unten

     <service android:name=".service.ClipboardMonitorService" android:label="Clipboard Monitor" android:exported="false"/> 

    Hier ist was für mich funktioniert

    Zuerst die Sendung:

     @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()); } } 

    Und dann ist das der Service

     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()); } } } 

    Auch die Berechtigungen:

     <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> 

    Zuerst müssen Sie diese Berechtigungen für AndroidManifest hinzufügen:

     <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" /> 

    Dann müssen Sie einen Service wie folgt hinzufügen:

     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; } } 

    Fügen Sie diesen Service in AndroidManifest hinzu:

      <service android:name=".Clipboard" /> 

    Service bei MainActivity starten

      startService(new Intent(this, Clipboard.class)); 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.