Android用键盘发送图像

时间:2014-12-09 13:20:55

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

我试图实现一个键盘应用程序,它应该能够将图像发送到当前活动(Whatsapp,消息应用程序等)。

有没有办法真正实现这个目标?当然它仅限于接受图像的应用程序,但我想知道什么是最好的方法。

尝试使用带有ImageSpan的StringBuilder但无法使其工作。 我想知道是否有更好的方法。使用Intent可能吗?

1 个答案:

答案 0 :(得分:3)

最后通过将Intents发送到前台应用程序来实现这一点,但这有局限性:消息传递应用程序通常需要选择会话,这会打破用户流并增加不必要的步骤(除非他们提供了将意图发送到特定聊天)。

这可以通过以下方式实现:

Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    sendIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    sendIntent.setPackage(getCurrentAppPackage(context, editorInfo));
    return sendIntent;

其中getCurrentAppPackage(...)是一个返回给定ContextEditorInfo的前景Activity的方法,当你绑定到输入字段时,可以从IME实现中获取。

public String getCurrentAppPackage(Context context, EditorInfo info) {
    if(info != null && info.packageName != null) {
        return info.packageName;
    }
    final PackageManager pm = context.getPackageManager();
    //Get the Activity Manager Object
    ActivityManager aManager =
            (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    //Get the list of running Applications
    List<ActivityManager.RunningAppProcessInfo> rapInfoList = aManager.getRunningAppProcesses();
    //Iterate all running apps to get their details
    for (ActivityManager.RunningAppProcessInfo rapInfo : rapInfoList) {
        //error getting package name for this process so move on
        if (rapInfo.pkgList.length == 0) {
            Log.i("DISCARDED PACKAGE", rapInfo.processName);
            continue;
        }
        try {
            PackageInfo pkgInfo = pm.getPackageInfo(rapInfo.pkgList[0], PackageManager.GET_ACTIVITIES);
            return pkgInfo.packageName;
        } catch (PackageManager.NameNotFoundException e) {
            // Keep iterating
        }
    }
    return null;
}

<强>更新: 在API级别25上添加了Commit Content API(支持库使其可以在API 13中运行)。更多信息:https://developer.android.com/preview/image-keyboard.html 在应用程序开始实现之前,上述方法可以用作后备。