2014-02-06 2 views
2

Я пытаюсь предоставить аудиофайл, сохраненный приложением. Файл добавляется в медиа-магазин, чтобы все приложения могли получить к нему доступ.Обмен файлами с использованием Intent.ACTION_SEND дает доступ к запрету на BBM

Intent mediaScannerIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
    Uri fileContentUri = Uri.fromFile(finalFile); 
    mediaScannerIntent.setData(fileContentUri); 
    this.sendBroadcast(mediaScannerIntent); 

Я использую Intent.ACTION_SEND для обмена файлами с другими приложениями:

public void shareRecording(View view) { 
    Intent i = new Intent(Intent.ACTION_SEND); 
    i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    i.setType("audio/mp3"); 
    i.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///" + recording.getFilePath())); 
    try { 
     startActivity(Intent.createChooser(i, "Share " + recording.getName())); 
    } catch (android.content.ActivityNotFoundException ex) { 
     Toast.makeText(this, "There are no app installed to share your audio file.", Toast.LENGTH_SHORT).show(); 
    } 
} 

Все хорошо работает со всеми приложениями, как GMail, Yahoo почта, Whatsapp, ... кроме BBM, это дает доступ закрыт. Что мне нужно сделать, чтобы он работал на BBM?

Спасибо за любую помощь.

UPDATE:

Я использовал

Uri fileUri = Uri.parse("content://" + recording.getFilePath()); 

вместо

Uri fileUri = Uri.parse("file:///" + recording.getFilePath()); 

и он работал на BBM, но не Othe приложения

Так что разница между Хавин URI проанализировал: «файл: ///» и «co ntent: // "? И как я могу использовать это, чтобы получить доступ ко всем приложениям?

Error on BBM

ответ

2

Решение заключается в использовании фактического файла для инициализации объекта Uri.

File recordingFile = new File(recording.getFilePath()); 
Uri fileUri = Uri.fromFile(recordingFile); 

Это работало со всеми приложениями, которые могут совместно использовать файл.

Смежные вопросы