2016-09-15 18 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)我能够得到应用程序的列表,现在我只需要想办法从列表中找到正确的应用程序 –

相关问题