如何确定用户当前正在键入的应用程序?

时间:2016-09-15 18:08:43

标签: android android-intent ime android-input-method

因此,如果你曾经使用过Bitmoji键盘,你知道它在你正在使用的任何应用程序中共享你选择的Bitmoji,无论是信使还是没有正常分享意图的短信,你可以选择与之分享的应用程序。这是我的第一个Android项目,因为我一直在为iOS开发。在这种情况下iOS可以轻松实现,因为您只需将图像复制到剪贴板(粘贴板),然后用户就可以将其粘贴到任何他们想要的位置。

现在我正在开发一个Android IME,需要知道一种方法来了解用户当前正在输入的应用程序?

有人能指出我的方向吗?在过去的一周里,我已经学到了很多关于Android开发的知识,而且我的头脑还有很多文档,尤其是 ContentProvider ,并且正确地将图像共享到Android SMS应用程序。

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

如果有人需要解决方案,我想发布这个问题的答案。首先,您需要使用InputMethod的EditorInfo类来获取当前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);
        }
    }