Как обрабатывать уведомления от Сервиса, который находится в отдельном модуле - PullRequest
0 голосов
/ 19 октября 2018

Я хочу создать модуль / библиотеку, которая будет воспроизводить 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:)

Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...