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); 
    } 
} 

私はクリックしてくださいを却下する3210から notificationバーまで、アプリがクラッシュします。メディアプレイヤーの起動方法を AlarmReceiver.javaから私に教えてください。それを DismissBroadcast.javaからやめてください。

+0

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:

1)すべての制御音楽ロジックが含まれているシングルトンクラスを作成します。 'AlarmReceiver receive;'がinitの値を持たないため、NullPointerExceptionが発生しました。 MediaPlayer mpとメソッドを別のクラスに移動する必要があると思います.AlertReceiverクラスに依存してはいけません。 'AlarmReceiver'がdata - > callメソッドを受け取って音楽を開始するとき。 [通知] - > [音楽を停止]をクリックします。 – NamNH

+0

私はあなたの言葉をキャッチしませんでした。もっと説明できますか?お願いします。私は初心者であり、放送についての知識を持っていませんReceiver –

答えて

2

これは単なるアイデアです。コードを充実させるには、自分自身を強化する必要があります。私はあなたを推測

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

ありがとう。やってみます。 –

+0

私は音楽を再生して音楽を停止するサービスを利用しました。それは私のために働く.. –

+0

@ NcitCosmosおめでとう、おいしい仲間! – NamNH

関連する問題