使用SEND意图处理共享文本文件和android app中的文本

时间:2018-08-03 10:06:49

标签: android android-studio android-intent

我有一个活动,可以在您分享任何东西时处理“发送”意图。 以下是该活动的代码。

ShareSendMessageActivity.java

public class ShareSendMessageActivity {

    boolean isDualPane;
    Bundle bundle;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        try {

                // Get intent, action and MIME type
                Intent intent = getIntent();
                String action = intent.getAction();
                String type = intent.getType();

                if ((Intent.ACTION_SEND.equals(action) || (Intent.ACTION_SEND_MULTIPLE.equals(action)) && type != null)) {
                    bundle = new Bundle();
                    handleSharedFile(intent);
                }


        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    void handleSharedFile(Intent intent) {
        ArrayList<Uri> listImageUri = new ArrayList<>();
        ArrayList<String> listPath = new ArrayList<>();
        String action = intent.getAction();

        if (action.equalsIgnoreCase(Intent.ACTION_SEND)) {
            Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
            listImageUri.add(imageUri);
        } else if (action.equalsIgnoreCase(Intent.ACTION_SEND_MULTIPLE)) {
            listImageUri = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
        }

        for (Uri u : listImageUri) {
            String path = FileUtils.getPath(this, u);
            listPath.add(path);
        }

        bundle.putBoolean(IConstants.KEY_IS_FROM_SHARE, true);
        bundle.putStringArrayList(IConstants.KEY_SHARED_FILE_PATH, listPath);

        Intent callingIntent = new Intent(this, LoginActivity.class);
        callingIntent.putExtras(bundle);
        callingIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        callingIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(callingIntent);
        finish();
        overridePendingTransition(0, 0);
    }


}

现在,当我共享* .txt文件时,此代码可以正常工作。但是,当我在应用程序中共享Chrome中的任何文本或URL时,如下面的屏幕截图所示。

1。分享网址 enter image description here

2。分享文字 enter image description here

所以在这两种情况下,它都会引发一个空指针异常,因为对于此代码而言

Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);

我得到 imageuri = null。

那么我该如何在同一活动中进行处理。因为当我共享.txt文件,共享URL或文本时,我得到的是相同的MIME类型,即“文本/纯文本”。 根据我在聊天应用程序中的要求,如果我共享.txt文件,则应该  附加到收件人,如果我共享文本或URL,它应该向收件人发送消息。但是,如何区分这个意图动作是来自.txt文件还是(text,URL)。

1 个答案:

答案 0 :(得分:1)

如果没有多余的EXTRA_STREAM,请在EXTRA_TEXT中查找文字。