安卓自定义键盘用于发送图片

4

我目前正在尝试实现一个自定义键盘,该键盘可以通过某种方式(可能是通过意图intent)将图片发送到特定应用程序。更具体地说,我正在尝试创建一个自定义键盘上的按键,以便将图片发送到默认的短信应用程序,以便它可以作为MMS消息发送。

为此,我已经修改了示例SoftKeyboard项目。以下是我目前的进展:

private void handleCharacter(int primaryCode, int[] keyCodes) {
    if (isInputViewShown()) {
        if (mInputView.isShifted()) {
            primaryCode = Character.toUpperCase(primaryCode);
        }
    }
    if (isAlphabet(primaryCode) && mPredictionOn) {
        mComposing.append((char) primaryCode);

        // Send message here
        Intent pictureMessageIntent = new Intent(Intent.ACTION_SEND);
        pictureMessageIntent.setType("image/png");
        Uri uri = Uri.parse("android.resource://" + this.getPackageName() + "/drawable/icon_en_gb");
        pictureMessageIntent.putExtra(Intent.EXTRA_STREAM, uri);
        startActivity(pictureMessageIntent);

        getCurrentInputConnection().setComposingText(mComposing, 1);
        updateShiftKeyState(getCurrentInputEditorInfo());
        updateCandidates();
    } else {
        getCurrentInputConnection().commitText(
                String.valueOf((char) primaryCode), 1);
    }
}

问题是我遇到了一个运行时异常,错误信息如下:
android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

我对安卓自定义键盘不熟悉,但我不确定启动新的 Activity 是否是最好的选择。有没有人有建议?

3个回答

3

问题在于,Activity通常是要从其他Activity启动的。Android添加了这个错误来确保开发人员只有在有意识地和自愿地更改此流程时才会更改。

在发送意图之前添加以下行以解决问题:

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);


我尝试了这个,但是我收到了一个提示框,上面写着“文件格式不支持”。 - jaywhy13

1
你需要按照提示添加FLAFG_ACTIVITY_NEW_TASK标记到意图中,任何来自服务的意图都需要该标记。修复它,它应该可以工作(或者至少启动活动)。

0

加入这行代码:

pictureMessageIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

如果你正在为发送图像的键盘创建代码,那么也请添加这行:

// To get images from uri
pictureMessageIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

在这行代码之前:

startActivity(pictureMessageIntent);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接