Я хочу получить результат от совместного использования файла на Android

#java #android #android-studio #onactivityresult #sharefile

Вопрос:

Я должен поделиться URL-адресом на Android по умолчанию, но я хочу получить ответ, если URL-адрес используется совместно или просто намерение закрыто. Я использую результат действия, но когда я делюсь им с gmail, он возвращает 0(ОТМЕНЕНО) то же самое, когда я закрываю намерение.Мне это нужно для установки общего доступа к тексту в текстовом представлении.Вот мой код.

 public void executeShareLinkClick() {
   Intent intentShare = new Intent(ACTION_SEND);
    intentShare.setType("text/plain");
    viewModel.isLinkSharedOpen.set(true);
    intentShare.putExtra(Intent.EXTRA_TEXT,"My Text of the message goes here ... write anything what you want");
    startActivityForResult(Intent.createChooser(intentShare, "Shared the text ..."),111);
}

public void onActivityResult(int requestCode, int resultCode, @Nullable @org.jetbrains.annotations.Nullable Intent data) {
   if (resultCode==RESULT_OK){
       viewModel.isLinkShared.set(true);
   }else{
       viewModel.isLinkShared.set(false);
   }
    viewModel.isLinkSharedOpen.set(false);
}
 

Ответ №1:

Извините, но то, что вы хотите, — это не вариант. ACTION_SEND не поддерживает результат, и приложениям не нужно указывать, отправил ли пользователь ваш контент.

Самое близкое, что вы можете сделать, — это добавить EXTRA_CHOSEN_COMPONENT_INTENT_SENDER к Intent возвращаемому createChooser() . Благодаря этому вы можете узнать, выбрал ли пользователь что-то в этом окне выбора. Однако:

  • Я не думаю, что вы узнаете, выбрал ли пользователь ничего
  • Это все еще не означает, что пользователь фактически использовал выбранное приложение для отправки вашего контента

Комментарии:

1. Как узнать, выбрал ли пользователь что-то с помощью этого EXTRA_CHOSEN_COMPONENT_INTENT_SENDER?

2. @Ergi16: Вы передаете в IntentSender качестве дополнительного, используя Intent.EXTRA_CHOSEN_COMPONENT_INTENT_SENDER в качестве имени дополнительного. Вы можете получить an IntentSender из таких объектов, как a PendingIntent . Это позволит вам указать, как вы хотите получить ответ. Этот подход широко не используется и не документирован, поэтому вы можете столкнуться с некоторыми проблемами. Также обратите внимание, что этот подход доступен только на Android 5.1 и выше, хотя, к счастью, он охватывает большинство современных устройств.

Ответ №2:

 if(getIntent().getData() != null) {
    Uri fileUri = getIntent().getData();
    File file = new File(fileUri);

}

// for multiple files
if(getIntent().getAction().equals(Intent.ACTION_SEND_MULTIPLE) amp;amp; getIntent().getClipData() != null) {

    int count = getIntent().getClipData().getItemCount();
    int currentUri = 0;
    while(currentUri < count) {
        Uri fileUri = getIntent().getClipData().getItemAt(currentUri).getUri();
        File file = new File(fileUri);
        currentUri = currentUri   1;
    }
}