/* * This file is part of WhereYouGo. * * WhereYouGo is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WhereYouGo is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with WhereYouGo. If not, see <http://www.gnu.org/licenses/>. * * Copyright (C) 2012 Menion <whereyougo@asamm.cz> */ package menion.android.whereyougo.utils.audio; import java.io.File; import java.util.ArrayList; import java.util.StringTokenizer; import android.app.Service; import android.content.Context; import android.content.Intent; import android.media.AudioManager; import android.media.MediaPlayer; import android.os.IBinder; public class AudioPlayService extends Service { // private static final String TAG = "AudioPlayService"; public static final String EXTRA_FILEPATHS = "EXTRA_FILEPATHS"; public static final String EXTRA_DELETE_FILE = "EXTRA_DELETE_FILE"; public static final String EXTRA_PLAY_AS_NOTIFICATION = "EXTRA_PLAY_AS_NOTIFICATION"; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); } private MediaPlayer mediaPlayer; private ArrayList<String> filePaths; private String actualFile; private boolean playAsNotification; private boolean deleteFile; private int originalVolumeMedia = Integer.MIN_VALUE; public void onStart(Intent intent, int value) { String filePath = intent.getStringExtra(EXTRA_FILEPATHS); playAsNotification = intent.getBooleanExtra(EXTRA_PLAY_AS_NOTIFICATION, true); deleteFile = intent.getBooleanExtra(EXTRA_DELETE_FILE, false); //Logger.w(TAG, "serviceStart:" + filePath + ", " + playAsNotification + ", " + deleteFile); StringTokenizer token = new StringTokenizer(filePath, ";"); filePaths = new ArrayList<String>(); while (token.hasMoreTokens()) { String file = token.nextToken().trim(); if (file.length() > 0 && (new File(file).exists())) filePaths.add(file); } //for (String file : filePaths) { // Logger.i(TAG, "play:" + file); //} if (filePath == null || filePaths.size() == 0) return; if (mediaPlayer == null && playAsNotification) { AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); originalVolumeMedia = am.getStreamVolume(AudioManager.STREAM_MUSIC); am.setStreamVolume(AudioManager.STREAM_MUSIC, originalVolumeMedia / 4, AudioManager.FLAG_VIBRATE); } playNextMedia(); } private void playNextMedia() { try { if (filePaths.size() == 0) { stopSelf(); return; } if (mediaPlayer == null) { initNewMediaPlayer(); } try { mediaPlayer.reset(); } catch (Exception e) { initNewMediaPlayer(); } actualFile = filePaths.remove(0); mediaPlayer.setDataSource(actualFile); mediaPlayer.prepareAsync(); mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { public void onPrepared(MediaPlayer mp) { try { mediaPlayer.start(); } catch (Exception e) { e.printStackTrace(); } } }); } catch (Exception e) { e.printStackTrace(); } } public void onDestroy() { super.onDestroy(); mediaPlayer.release(); mediaPlayer = null; if (originalVolumeMedia != Integer.MIN_VALUE && playAsNotification) { AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); am.setStreamVolume(AudioManager.STREAM_MUSIC, originalVolumeMedia, AudioManager.FLAG_VIBRATE); } } private void initNewMediaPlayer() { if (mediaPlayer != null) { try { mediaPlayer.stop(); } catch (Exception e) {} mediaPlayer = null; } mediaPlayer = new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_NOTIFICATION); mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { public void onCompletion(MediaPlayer mp) { mediaPlayer.release(); if (deleteFile) try { (new File(actualFile)).delete(); } catch (Exception e) { e.printStackTrace(); } playNextMedia(); } }); } }