У меня есть действие, которое обрабатывает намерение «ОТПРАВИТЬ» всякий раз, когда вы чем-то делитесь. Ниже мой код для этого действия.
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 в приложении, как показано на скриншоте ниже.
<сильный>2. Поделиться текстом
Таким образом, в обоих случаях выдается исключение нулевого указателя, потому что для этого кода
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
Я получаю imageuri = null.
Итак, как я могу справиться с этим в той же деятельности. Потому что, когда я делюсь файлом .txt, делюсь URL-адресом или текстом, я получаю тот же тип mime, что и «текст/обычный». В соответствии с моим требованием в приложении чата, если я делюсь файлом .txt, он должен быть прикреплен к получателю, а если я делюсь текстом или URL-адресом, он должен отправлять сообщение получателю. Но как я могу определить, было ли это действие намерения исходить из файла .txt или (текст, URL).