Я пытался отправить видео в Instagram и Whatsapp, используя следующий код:Каков правильный способ формирования URI в видеофайл, который я намерен отправить в Whatsapp?
private void createShareIntent(String type, shareVectorList svList){
// Create the new Intent using the 'Send' action.
Intent share = new Intent(Intent.ACTION_SEND);
// Set the MIME type
share.setType(type);
// Create the URI from the media
File media = new File(pathName);
Uri uri = Uri.fromFile(media); //This is the part I'm confused about
// Add the URI to the Intent.
share.putExtra(Intent.EXTRA_STREAM, uri);
switch(svList)
{
case INSTAGRAM:
share.setPackage("com.instagram.android");
break;
case WHATSAPP:
share.setPackage("com.whatsapp");
break;
default:
break;
}
// Broadcast the Intent.
startActivity(Intent.createChooser(share, "Share to"));
}
Когда я отправить видео в Instagram, он загружает штраф. Однако, когда я отправляю видео в Whatsapp, он просто показывает черный экран, на котором должна быть часть редактирования видео.
Когда я смотрю журналы Android, в нем указано исключение FileNotFoundException.
Кто-то сказал мне, что это из-за неправильного URI или URI, указывающего на какой-то файл, который не существует.
Я пробовал использовать Uri.parse("file://" + pathName)
, но он по-прежнему распределяет мне то же Исключение.
Я пытался получать URI из опрашивать ContentResolver
«s со следующим кодом:
public Uri retrieveUriFromVideoPath(String pathName) {
File file = new File(pathName);
Cursor cursor = getContentResolver().query(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
new String[] { MediaStore.Video.Media._ID },
MediaStore.Video.Media.DATA + "=? ",
new String[] { pathName }, null);
if (cursor != null && cursor.moveToFirst()) {
int id = cursor.getInt(cursor.getColumnIndex(MediaStore.Video.VideoColumns._ID));
cursor.close();
return Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + id);
} else {
if (file.exists()) {
ContentValues values = new ContentValues();
values.put(MediaStore.Video.Media.DATA, pathName);
return getContentResolver().insert(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
} else {
return null;
}
}
}
Однако это только возвращает меня content://media/external/images/media/<video_file_id>
, и то же самое исключение всплывает.
Мои вопросы:
- Как я должен сформировать URI, который ссылается на видео, которое я намерен поделиться с Whatsapp?
- Если это видео в пользовательской папке, которую я сгенерировал, будет работать тот же метод?
- Что делать, если имя файла содержит пробелы?