Я хочу создать модуль / библиотеку, которая будет воспроизводить MediaPlayer
в фоновом режиме.Дополнительно я хочу управлять ACTION_PLAY
, ACTION_PAUSE
с Notifcation
.
Класс обслуживания
package com.xyz.library.service; //Lib
public class BackgroundSoundService extends Service {
public static MediaPlayer mMediaPlayer;
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
// Initialising MediaPlayer and setting MP3 from Raw Directory
mMediaPlayer = MediaPlayer.create(this, R.raw.classical_flute);
mMediaPlayer.setLooping(true); // Set looping of MP3
mMediaPlayer.setVolume(70, 70); // Set default volume
// MP3 Link: https://www.zedge.net/ringtone/b023aace-fa15-303b-9c74-8ff06fd3cc4e
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mMediaPlayer.start(); // Starts MediaPlayer
Intent notificationIntent = new Intent(this, BackgroundSoundService.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
.setContentTitle("Service is running..")
.setContentText("This is Content Text")
.setContentIntent(pendingIntent);
Notification notification = builder.build();
if (Build.VERSION.SDK_INT >= 26) {
NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, NOTIFICATION_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (notificationManager != null) {
notificationManager.createNotificationChannel(channel);
}
}
startForeground(Integer.parseInt(NOTIFICATION_CHANNEL_ID), notification);
return START_STICKY;
}
@Override
public void onStart(Intent intent, int startId) {
// TO DO
}
public IBinder onUnBind(Intent arg0) {
// TO DO Auto-generated method
return null;
}
@Override
public void onDestroy() {
// Stopping MediaPlayer for playing Music
mMediaPlayer.stop();
mMediaPlayer.release();
stopForeground(true);
}
@Override
public void onLowMemory() {
}
}
Класс AudioModule для UserControl
package com.xyz.library.audiomodule; //Lib
public class AudioModule {
private Context context;
public AudioModule(Context context) {
this.context = context;
}
public void playMusic() {
Intent intent = new Intent(context, BackgroundSoundService.class);
context.startService(intent);
}
public void stopMusic() {
Intent intent = new Intent(context, BackgroundSoundService.class);
context.stopService(intent);
}
public void pauseMusic(){
BackgroundSoundService.mMediaPlayer.pause();
}
}
Код в средстве запускаприложение
package com.xyz.audiomodule; //Application
import com.xyz.library.audiomodule.AudioModule; //Lib Imported
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAudioModule = new AudioModule(this);
}
public void playMusic(View view) {
mAudioModule.playMusic(); //Service/Music is started
}
public void pauseMusic(View view) {
mAudioModule.pauseMusic(); //Service/Music is paused
}
public void stopMusic(View view) {
mAudioModule.stopMusic(); //Service/Music is stopped
}
}
Мои проблемы
1) Я хочу установить пользовательский Notifation
, чтобы я мог контролироватьMediaPlayer Action
, но я даже не могу установить setContentTitle(title);
Всегда отображается: Название: AppName запущено .. Сообщение: нажмите для получения дополнительной информации или для остановки приложения. Screeshot
2) Когда я нажимаю на Уведомление, оно показывает Setting> AppDetails, но я хочу запустить приложение (MainActivity
пакета приложения)
Пожалуйста, помогите мне решить эту проблему.Приложение работает нормально, если я пишу Service
в пакете приложения, но не работаю отдельно module
.
PS.Извините, если я не могу правильно объяснить.Это мой первый вопрос по SOF:)
Заранее спасибо