0

Я создаю кнопку таймера, чтобы установить время воспроизведения музыкального клипа. Я создаю диспетчера тревоги, чтобы установить время,Остановка медиаплеера с панели уведомлений

AlarmMAnager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
Intent intent = new Intent(context, AlarmReceiver.class); 
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 

Набор 10сек

alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
        SystemClock.elapsedRealtime() + 
          10 * 1000, alarmIntent); 

AlarmReceiver.java

public class AlarmReceiver extends BroadcastReceiver { 

    private CharSequence msg = "Notofication"; 
    MediaPlayer mp; 
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "I'm running", Toast.LENGTH_SHORT).show(); 
     mp = MediaPlayer.create(context, R.raw.music); 
     mp.start(); 

     Intent dismissIntent = new Intent(context,DismissBroadcast.class); 
     PendingIntent piDismiss = PendingIntent.getBroadcast(context, 100, dismissIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

     NotificationCompat.Builder builder = 
       (NotificationCompat.Builder) new NotificationCompat.Builder(context) 
         .setSmallIcon(R.mipmap.ic_launcher) 
         .setContentTitle("Test") 
         .setAutoCancel(true) 
         .setContentText("test") 
         .setPriority(Notification.PRIORITY_MAX) 
         .setDefaults(Notification.DEFAULT_ALL) 
         .setStyle(new NotificationCompat.BigTextStyle() 
           .bigText(msg)) 
         .addAction(R.drawable.ic_cancel_white_36dp, 
           "Dismiss", piDismiss); 

     NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
     manager.notify(0, builder.build()); 
    } 
    public MediaPlayer cancelMusic(){ 
     return mp; 
    } 
} 

DismissBroadcast.java

public class DismissBroadcast extends BroadcastReceiver { 
    AlarmReceiver receive; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     receive.cancelMusic(); 
     receive.mp.stop(); 
     try { 
      receive.mp.prepare(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     receive.mp.seekTo(0); 
    } 
} 

Когда я нажимаю увольнять button от notification бар, приложение выйдет из строя. Пожалуйста, дайте мне некоторые идеи о том, как запустить медиаплеер от AlarmReceiver.java и остановить его с DismissBroadcast.java.

+0

Я думаю, вы получил NullPointerException, вызывающий 'AlarmReceiver receive;' не инициализировал значение. Я думаю, вы должны перенести «MediaPlayer mp» и запустить метод в другой класс, он не должен зависеть от класса AlarmReceiver. Когда метод «AlarmReceiver» принимает данные ->, чтобы начать музыку. затем при нажатии уведомления -> вызов остановить музыку. – NamNH

+0

Я не поймал твое слово. Можете ли вы объяснить больше? Пожалуйста. Я новичок и еще не згла о вещании Получатель –

ответ

2

Это всего лишь идея, для большего количества кода вы должны усовершенствовать себя.

1) Создать класс одноплодной, который содержит все управления музыкальной логики:

public class MusicControl { 
    private static MusicControl sInstance; 
    private Context mContext; 
    private MediaPlayer mMediaPlayer; 
    public MusicControl(Context context) { 
     mContext = context; 
    } 

    public static MusicControl getInstance(Context context) { 
     if (sInstance == null) { 
      sInstance = new MusicControl(context); 
     } 
     return sInstance; 
    } 

    public void playMusic() { 
     mMediaPlayer = MediaPlayer.create(context, R.raw.music); 
     mMediaPlayer.start(); 
    } 

    public void stopMusic() { 
     if(mMediaPlayer != null) { 
      mMediaPlayer.stop(); 
      mMediaPlayer.seekTo(0); 
     } 
    } 
} 

2) AlarmReceiver.java

public class AlarmReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     MusicControl.getInstance(context).playMusic(); 
     // do your code here... 
    } 
} 

3) DismissBroadcast.java

public class DismissBroadcast extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     MusicControl.getInstance(context).stopMusic(); 
     // do your code here... 
    } 
} 
+0

Thanks. Я попробую. –

+0

Я использовал сервис, чтобы воспроизвести музыку и остановить музыку. Это работает для меня .. –

+0

@NcitCosmos Поздравляю, милый брат! – NamNH