2016-09-15 2 views
0

Wenn Sie also jemals die Bitmoji-Tastatur verwendet haben, wissen Sie, dass sie Ihr ausgewähltes Bitmoji in jeder Anwendung teilt, egal ob Messenger oder SMS, ohne die normale Freigabeabsicht, wo Sie auswählen, mit welcher Anwendung Sie es teilen möchten. Dies ist wirklich mein erstes Android-Projekt, wie ich es für iOS entwickelt habe. iOS macht es in diesem Fall einfach, da Sie das Bild einfach in die Zwischenablage kopieren (Pasteboard) und der Benutzer es dann an beliebiger Stelle einfügt.Wie ermittelt man die Anwendung, in die der Benutzer gerade eintippt?

Jetzt entwickle ich einen Android IME und muss wissen, auf welche Weise ich weiß, welche Anwendung der Benutzer gerade eingibt?

Also kann mir jemand in die Richtung zeigen? Ich habe eine Menge über Android-Entwicklung in der letzten Woche gelernt, und mein Kopf schwimmt vom Lesen so viel von der Dokumentation, vor allem mit ContentProvider und Bilder mit der Android-SMS-Anwendung korrekt teilen.

Antwort

0

ich die Antwort auf diese Frage für den Fall schreiben wollte. Zuerst müssen Sie die EditorInfo Klasse der Inputmethod verwenden, um die package des aktuellen InputConnetion zu erhalten mit:

EditorInfo editorInfo = getCurrentInputEditorInfo(); 
String inputConnectionPackageName = editorInfo.packageName; 

Dann müssen Sie Ihre Absicht Aktivitäten abfragen, um zu sehen, welche Anwendungen der Benutzer, dass die Absicht Sie werden handhaben ist versuchend zu senden. Mit:

PackageManager pManager = getPackageManager(); 
    List<ResolveInfo> mApps = new ArrayList<ResolveInfo>(); 
    mApps = pManager.queryIntentActivities(intent, 
      PackageManager.COMPONENT_ENABLED_STATE_ENABLED); 

Dann alles, was Sie tun müssen, ist ein erstellen For-Schleife und vergleichen:

for (int i = 0; i < mApps.size()-1; i++) { 
     ResolveInfo info = mApps.get(i); 

     if (info.activityInfo.packageName.equalsIgnoreCase(editorInfo.packageName)) { 
      intent.setPackage(info.activityInfo.packageName); 
      //send out the intent 
      startActivity(intent); 
     } 
    } 
0

den Code unten Versuchen Sie die Paketnamen zu erhalten: jemand ist in der Notwendigkeit der Lösung

ActivityManager mActivityManager = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE); 
if(Build.VERSION.SDK_INT > 20){ 
    String mPackageName = mActivityManager.getRunningAppProcesses().get(0).processName; 
} 
else{ 
    String mPackageName = mActivityManager.getRunningTasks(1).get(0).topActivity.getPackageName(); 
} 
+0

Ich war das Spiel mit der Aktivität und Package Managern, aber ich habe keine Informationen von ihnen bekommen andere als Informationen über meinen eigenen IME-Dienst im Debugger ..... UND das macht für mich aus Sicherheitsgründen Sinn und hält die Anwendungen auf einem Gerät sandboxed. Ich kann einfach nicht herausfinden, wie sie Daten mit welcher Anwendung auch immer übertragen oder teilen. Wenn ich SMS benutze, teilt es die Bilder mit der SMS-Anwendung, wenn ich Google Mail verwende, teilt es sich mit Google Mail und so weiter. Wenn ich keine Auswahlmöglichkeit mit meiner Absicht einschließe, wird es automatisch angezeigt. teilt die SMS-Anwendung. –

+0

Ok, dank dieser [POST] (http://stackoverflow.com/questions/6827407/how-to-customize-share-intent-in-android/9229654#9229654) Ich bin in der Lage, die Liste der Anwendungen zu bekommen, Jetzt muss ich nur noch einen Weg finden, um die richtige Anwendung aus der Liste zu finden –

Verwandte Themen