Я предполагаю, что вы конкатенируете что-то в цикле, например
foreach ($ a as $ b) $ string. = $ b. '';
гораздо лучше собирать элементы в массиве, а затем присоединяться к нему с помощью разделителя, который вам нужен
foreach ($ a as $ b) $ result [ ] = $ b; $ result = implode (',', $ result);
это решает проблемы с конечным и двойным разделителем, которые обычно возникают при конкатенации
Сделать это без обслуживания
http://www.rbgrn.net/content/307-light-racer-20-days-61-64-completion
Если вы так серьезно относитесь к тому, чтобы делать это с помощью службы mediaplayer
Intent svc=new Intent(this, BackgroundSoundService.class);
startService(svc);
public class BackgroundSoundService extends Service {
private static final String TAG = null;
MediaPlayer player;
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
player = MediaPlayer.create(this, R.raw.idil);
player.setLooping(true); // Set looping
player.setVolume(100,100);
}
public int onStartCommand(Intent intent, int flags, int startId) {
player.start();
return 1;
}
public void onStart(Intent intent, int startId) {
// TO DO
}
public IBinder onUnBind(Intent arg0) {
// TO DO Auto-generated method
return null;
}
public void onStop() {
}
public void onPause() {
}
@Override
public void onDestroy() {
player.stop();
player.release();
}
@Override
public void onLowMemory() {
}
}
Пожалуйста, позвоните в эту службу в манифест. Убедитесь, что в конце .BackgroundSoundService string
<service android:enabled="true" android:name=".BackgroundSoundService" />
@ Ответ Synxmax корректен при использовании классов Service
и MediaPlayer
, однако вам также нужно объявить Service
в манифесте, чтобы он работал, например:
<service
android:enabled="true"
android:name="com.package.name.BackgroundSoundService" />
Theres отличный учебник по этому вопросу в HelloAndroid по этому самому вопросу. Infact это был первый хит, который я получил в Google. Вы должны попробовать googling, прежде чем спрашивать здесь, поскольку это хорошая практика.
У меня была проблема запустить его, и я внесли некоторые изменения, чтобы запустить его с mp3-источником. здесь BackfrounSoundService.java
файл. что мой mp3-файл находится в моей SD-карте в моем телефоне.
public class BackgroundSoundService extends Service {
private static final String TAG = null;
MediaPlayer player;
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.d("service", "onCreate");
player = new MediaPlayer();
try {
player.setDataSource(Environment.getExternalStorageDirectory().getAbsolutePath() + "/your file.mp3");
} catch (IOException e) {
e.printStackTrace();
}
player.setLooping(true); // Set looping
player.setVolume(100, 100);
}
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("service", "onStartCommand");
try {
player.prepare();
player.start();
} catch (IOException e) {
e.printStackTrace();
}
return 1;
}
public void onStart(Intent intent, int startId) {
// TO DO
}
public IBinder onUnBind(Intent arg0) {
// TO DO Auto-generated method
return null;
}
public void onStop() {
}
public void onPause() {
}
@Override
public void onDestroy() {
player.stop();
player.release();
}
@Override
public void onLowMemory() {
}
}
Создайте службу переднего плана с флагом START_STICKY
.
@Override
public int onStartCommand(Intent startIntent, int flags, int startId) {
if (startIntent != null) {
String action = startIntent.getAction();
String command = startIntent.getStringExtra(CMD_NAME);
if (ACTION_CMD.equals(action)) {
if (CMD_PAUSE.equals(command)) {
if (mPlayback != null && mPlayback.isPlaying()) {
handlePauseRequest();
}
} else if (CMD_PLAY.equals(command)) {
ArrayList<Track> queue = new ArrayList<>();
for (Parcelable input : startIntent.getParcelableArrayListExtra(ARG_QUEUE)) {
queue.add((Track) Parcels.unwrap(input));
}
int index = startIntent.getIntExtra(ARG_INDEX, 0);
playWithQueue(queue, index);
}
}
}
return START_STICKY;
}
Затем это можно вызвать из любой активности для воспроизведения музыки
Intent intent = new Intent(MusicService.ACTION_CMD, fileUrlToPlay, activity, MusicService::class.java)
intent.putParcelableArrayListExtra(MusicService.ARG_QUEUE, tracks)
intent.putExtra(MusicService.ARG_INDEX, position)
intent.putExtra(MusicService.CMD_NAME, MusicService.CMD_PLAY)
activity.startService(intent)
. Вы можете привязываться к службы с помощью bindService и сделать паузу / остановку службы из соответствующих методов жизненного цикла активности.
Вот хороший учебник о Воспроизведение музыки в фоновом режиме на Android
слишком поздно для вечеринки здесь, но я все равно добавлю свои $ 0.02, Google выпустил бесплатный образец под названием универсальный музыкальный плеер, с помощью которого вы сможете научиться транслировать музыку на всех платформах Android (авто, смотреть, мобильно, тв .. ) он использует сервис, чтобы воспроизводить музыку в фоновом режиме, действительно ли это очень полезно. вот ссылка на проект https://github.com/googlesamples/android-UniversalMusicPlayer
Service
в манифесте, чтобы он действительно работал. См. Мой дополнительный ответ ниже о том, как это сделать. – edwoollard 27 March 2016 в 19:29