所以如果你曾经使用过Bitmoji键盘,你知道它在你使用的任何应用程序中共享你选择的Bitmoji,无论是messenger还是SMS,没有正常的共享意图弹出,在那里你选择与什么应用程序共享它。这是我的第一个Android项目,因为我一直在为iOS开发。iOS在这种情况下很容易做到,因为你只需将图像复制到剪贴板(粘贴板),然后用户将其粘贴到他们想要的地方。
现在我正在开发一个Android IME,需要知道一种方法来知道用户目前正在输入什么应用程序?
谁能给我指个方向?上周我学到了很多关于Android开发的知识,阅读了这么多的文档,特别是ContentProvider和正确地将图像共享到Android SMS应用程序中,我的头有点游泳。试试下面的代码来获取包名:
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();
}
我想张贴这个问题的答案,以防有人需要解决方案。首先,您需要使用InputMethod的EditorInfo类来获取当前inputconnection的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);
}
}