如何判断用户当前正在输入的应用程序?
How to determine the application the user is currently typing in?
因此,如果您曾经使用过 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();
}
我想 post 这个问题的答案,以防有人需要解决方案。首先,您需要使用 InputMethod 的 EditorInfo class 来获取当前 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);
}
}
因此,如果您曾经使用过 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();
}
我想 post 这个问题的答案,以防有人需要解决方案。首先,您需要使用 InputMethod 的 EditorInfo class 来获取当前 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);
}
}