Try this:
/**
* É necessário salvar o arquivo no External Storage do usuário, para compartilhar
*/
public void onClickshe() {
InputStream inputStream;
FileOutputStream fileOutputStream;
try {
// Carregamos o arquivo...
inputStream = getResources().openRawResource(R.raw.starboy);
/** Retorna o diretório primário de armazenamento compartilhado/externo. Este diretório pode
* atualmente não está acessível se ele foi montado pelo usuário em seus
* computador, foi removido do dispositivo, ou algum outro problema tem aconteceu.**/
fileOutputStream = new FileOutputStream(new File(Environment.getExternalStorageDirectory(), "sound.mp3"));
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) > 0) {
fileOutputStream.write(buffer, 0, length);
}
inputStream.close();
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
//Agora com o arquivo criado, vamos compartilhar!!
final Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("audio/*");
shareIntent.setPackage("com.whatsapp");
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + Environment.getExternalStorageDirectory() + "/sound.mp3"));
startActivity(Intent.createChooser(shareIntent, "Compartilhando no whatsapp"));
}
Attention!
You must add the following permission on AndroidManifest.xml
:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
This allows the file to be shared to be created!
As of Android 6.0 (API level 23), users grant
permissions to applications while they are running, not when
they are installed. This approach optimizes the installation process
application because the user does not need to grant permissions to the
install or update the application
// Verificamos se há permissão... (this = Activity)
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// Devemos mostrar uma explicação?
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// Mostra uma extensão para o usuário * de forma assíncrona * - não bloqueie
// este tópico aguardando a resposta do usuário! Após o usuário
// vê a explicação, tente novamente solicitar a permissão.
} else {
// Nenhuma explicação necessária, podemos solicitar a permissão.
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_CONTACTS},
CODE_REQUEST);
// CODE_REQUEST é um int, que será comparado no onResult
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case CODE_REQUEST: {
// Se o pedido for cancelado, os arrays de resultados estão vazios.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// foi concedida permissão, Neste momento você tem a permissão consedida!
} else {
// Não temos, permissão!
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}