2016-09-15 69 views
0

因此,如果您曾經使用過Bitmoji鍵盤,那麼您知道它會在您使用的任何應用程序中共享您選擇的Bitmoji,無需使用正常的共享意圖彈出信息或SMS,您可以在其中選擇要共享的應用程序。這是我第一個Android項目,因爲我一直在爲iOS開發。在這種情況下,iOS只需將圖像複製到剪貼板(粘貼板),然後用戶將其粘貼到任意位置即可。如何確定用戶當前正在鍵入的應用程序?

現在我正在開發一個Android IME,並且需要知道一種方法來知道用戶當前正在鍵入什麼應用程序?

那麼有人能指點我嗎?我在上週學到了很多有關Android開發的知識,我的頭腦是從閱讀大量文檔中游泳的,尤其是與ContentProvider以及正確地將圖像共享到Android SMS應用程序。

回答

0

我想答案張貼到這個問題,以防有人是需要解決的。首先,你需要使用EditorInfo類INPUTMETHOD的使用來獲得當前InputConnetion的的packageName:

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

然後,你需要查詢你的意圖的活動,看看哪些應用程序的用戶已經將處理你的意圖試圖發送。使用:

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

然後,所有你需要做的就是創建一個For循環和比較:

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

嘗試下面的代碼來獲取包名稱:

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

我與活動和包管理器玩,但我沒有從他們那裏得到任何信息除了在調試器中關於我自己的IME服務的信息之外.....從安全角度來看,這對我來說很有意義,並將應用程序保留在沙盤上。我只是無法弄清楚他們如何推送或共享任何應用程序正在使用的數據。如果我使用短信,它將與SMS應用程序共享圖像,如果我使用gmail與gmail等共享的話。如果我沒有包含選擇器,但我的意圖是自動的。分享到SMS應用程序。 –

+0

好的,感謝這[POST](http://stackoverflow.com/questions/6827407/how-to-customize-share-intent-in-android/9229654#9229654)我能夠得到應用程序的列表,現在我只需要想辦法從列表中找到正確的應用程序 –

相關問題