Playing raw audio file in default music player - android

My App is having audio files in raw folder. Now whenever app gets launched these audio files should play using default music player. I tried below code App is crashing with "No Activity found to handle this intent".
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("companion.harman.com.ceshuclient/res/raw/fav.mp3"), "audio/*");
startActivity(intent);
The same audio files can be played using "MediaPlayer" object but that is not what exactly I'm trying to acheive.
Any sample code or links can be helpful.
Thanks in Advance.

Please try the following (Where mp3file is the name of the file in the raw folder without extension. Use only lowercase characters, please):
MediaPlayer player = MediaPlayer(this,R.raw.mp3file);
player.prepare();
player.start();
player.stop();
player.reset();
player.release();
player = null;
Here is the link of demo source code to play mp3 File

Related

Play song on default music player - android

My app show list of song from sd card. I want to be able to play the song on the default player. I've got all the data about the song: id, title, album, artist, path...
Is there a way to launch the default player to play the song?
What I've tried:
Using Intent.CATEGORY_APP_MUSIC. I can launch the default player, but can't set the song.
Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_MUSIC) open the default music app.
Howeverintent.setData(Uri.withAppendedPath(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id)) throws exception that intent not found.
Using deprecated MediaStore.INTENT_ACTION_MUSIC_PLAYER. Activity not found.
Intent(MediaStore.INTENT_ACTION_MUSIC_PLAYER).setDataAndType(Uri.fromFile(songFile), "audio/*")
Using INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH. Launch the search, but not the song, says couldn't prepare mix on Play music. However, it works from Google now, so it may be the key.
Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH).putExtra(SearchManager.QUERY, name)
Using ACTION_VIEW. it works but it launch a compact version of the player, and I want the full player.
Note: I want to launch External player, not in my app.
Update: Looks like Google Now hardcoded Play Music and Youtube support.
If you would like to start the default music player app on the device, should try this:
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
File file = new File(YOUR_SONG_URI);
intent.setDataAndType(Uri.fromFile(file), "audio/*");
startActivity(intent);
it is launching a compact version for playing as that app has implemented it that way,
you can find many 3rd party app that open the full app with
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
File file = new File(YOUR_SONG_URI);
intent.setDataAndType(Uri.fromFile(file), "audio/*");
startActivity(intent);
as you already tried this
Try with something simple like this:
MediaPlayer mp = new MediaPlayer();
mp.setLooping(true);
try {
mp.setDataSource(mFile); //mFile is the path to your mp3 file
} catch (Exception e) {
e.printStackTrace();
}
try {
mp.prepare();
} catch (Exception e) {
e.printStackTrace();
}
mp.start();
And one more example with MadiaPlayer and file saved in res/raw/ directory:
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start(); // no need to call prepare(); create() does that for you
More about: http://developer.android.com/guide/topics/media/mediaplayer.html
Intent musicIntent = new Intent();
//use Action VIEW to launch app
musicIntent.setAction(Intent.ACTION_VIEW);
String mimeType = getMimeTypeFromFile(); // in your case it is audio
Uri uri = " yourfile uri";
musicIntent.setDataAndType(uri,mimeType);
startActivity(intent);
The default view application will be opened if the mime type is changed, for video mime-type video player will be opened, for audio music player and for image gallery.
If there are multiple player then Resolver activity will be opened.
Don’t forget to catch ActivityNotFoundException
In Music player for ACTION_VIEW AudioPreview activty is called with priority. there are other activities which handle this action , just check once with action "com.android.music.PLAYBACK_VIEWER" instead of ACTION_VIEW or with it.

set metadata for an audio stream in external music player

unfortunately I'm unable to set metadata such as "TITLE" or "ARTIST" for a track which I'm streaming from soundcloud in an external musicplayer.
This is how I thought it should work:
Uri uri = Uri.parse("http://api.soundcloud.com/tracks/135150341/stream?client_id=MY_SECRET_CLIENT_ID");
Intent it = new Intent(Intent.ACTION_VIEW);
it.putExtra(MediaStore.EXTRA_MEDIA_ALBUM, "BLA");
it.putExtra(MediaStore.Audio.Media.TITLE, "TEST TITLE");
it.putExtra(MediaStore.Audio.Media.ARTIST, "TEST ARTIST");
it.setDataAndType(uri, "audio/mp3");
startActivity(it);
After this part I can choose my favorite player and it'll start playing the track,
but I cannot set the metada... I don't see any name of the artist or the track or anything...
Is there any way to set the metadata for this audio stream?
Or to get the metadata from soundcloud directly?
Thanks in advance,
Marcus
Looks like that the streamed mp3 file does not have the metadata.
You can access all data available using following api call:
http://api.soundcloud.com/tracks/135150341.json?client_id=10fe52a882bf103b82641c33870f6500

Play multiple songs with Android intent

In my application, I need to launch the Android Music Player. And, for now, it works perfectly :
Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
File file = new File(file_path);
intent.setDataAndType(Uri.fromFile(file), "audio/*");
startActivity(Intent.createChooser(intent, "..."));
But the user can't use the "next" and "prev" buttons to switch music. That's why I try to launch multiple songs at once (a playlist). And I don't really know how to do this!
Give an array to the intent ?
As far I know there is no way to launch multiple tracks. But you can implement your player, using the MediaPlayer class. Which also doesn't supports multiple tracks. So you also have to make a service, use OnCompletionListener to listen when tracks finish, to start the next track.
This thread will help:
How do Android mediaplayers continuing playing songs when app is closed?
Also this one:
Start default music player with music playing by default
yes their is no direct way to get multiple songs using intent . but you can fetch selected songs. play one by one by your code.using media player.
set songs in queue .
For your purpose you had to make your own media player.
using this code for picking multiple songs sourcetopickmultiplesongs;
store the selected song array.
play one after other using this piece of code .
MediaPlayer mp1=MediaPlayer.create(getBaseContext(), R.raw.sound1);
MediaPlayer mp2=MediaPlayer.create(getBaseContext(), R.raw.sound2);
mp1.prepare();
mp2.prepare();
mp1.start();
mp1.setNextMediaPlayer(mp2);
hope this helps .

android: using default video player

I have an application that plays video files.
I have been using code for using Videoview and starting the Videoview manually to play video files. However, I just wanted to know if I can use the default media player or video player of android rather than creating or using the VideoView to play the file..
Please make comments if the question is not clear.
Thanks alot
Sure - just use an Intent with the file Uri.
File file = new File("fileUri");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "video/*");
startActivity(intent);

Play audio files with default player

I want to play an MP3 file using the default Android player. I managed to get the file playing but it plays in the background. I want to have all the nice controls for pausing, playing, etc.
My code now is something like:
String link = "http://www.example.com/file.mp3";
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(link);
mp.prepare();
mp.start();
How can I do it that when this file begins to play to go to another screen with the player and all the nice controls?
The MediaPlayer class should be used when you want to implement your own media player. If you want to use an existing player, you'll have to launch the appropriate intent, for example:
Uri uri = Uri.parse("http://www.site.com/file.mp3");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
If the particular Action doesn't work, take a look here: http://developer.android.com/reference/android/content/Intent.html

Categories

Resources