обрабатывать общий текстовый файл и текст в приложении для Android с намерением ОТПРАВИТЬ

У меня есть действие, которое обрабатывает намерение «ОТПРАВИТЬ» всякий раз, когда вы чем-то делитесь. Ниже мой код для этого действия.

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, этот код работает нормально. Но когда я делюсь любым текстом или URL-адресом из Chrome в приложении, как показано на скриншоте ниже.

<сильный>1. Общий URL введите здесь описание изображения

<сильный>2. Поделиться текстом введите здесь описание изображения

Таким образом, в обоих случаях выдается исключение нулевого указателя, потому что для этого кода

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

Я получаю imageuri = null.

Итак, как я могу справиться с этим в той же деятельности. Потому что, когда я делюсь файлом .txt, делюсь URL-адресом или текстом, я получаю тот же тип mime, что и «текст/обычный». В соответствии с моим требованием в приложении чата, если я делюсь файлом .txt, он должен быть прикреплен к получателю, а если я делюсь текстом или URL-адресом, он должен отправлять сообщение получателю. Но как я могу определить, было ли это действие намерения исходить из файла .txt или (текст, URL).


person Kush Patel    schedule 03.08.2018    source источник


Ответы (1)


Если EXTRA_STREAM лишнего нет, поищите текст в EXTRA_TEXT.

person CommonsWare    schedule 03.08.2018
comment
В настоящее время обрабатывается сценарий в соответствии с вашим состоянием, и он работает нормально. - person Kush Patel; 03.08.2018