2016-04-13 3 views
2

フレームレイアウト経由で通知に再生/一時停止ボタンを実装しようとしていますが、mediaPlayerを一時停止するときに通知が再生ボタンを表示するように更新しません。ビューを更新するには?ブロードキャストレシーバクラスでAndroid - 再生/一時停止通知内のRemoteViewを更新する

RemoteViews nv = new RemoteViews(getPackageName(), R.layout.notificationLayout); 
Intent switchIntent = new Intent("com.example.android.ACTION_PLAY"); 
PendingIntent pendingSwitchIntent = PendingIntent.getBroadcast(this, 100, switchIntent, 0); 
nv.setOnClickPendingIntent(R.id.pause, pendingSwitchIntent); 

@Override 

public void onReceive(Context context, Intent intent) { 

      String action = intent.getAction(); 

      if(action.equalsIgnoreCase("com.example.app.ACTION_PLAY")){ 
       if(mp.isPlaying()) 
       { 
        nv.setViewVisibility(R.id.pause, View.INVISIBLE); 
        nv.setViewVisibility(R.id.play, View.VISIBLE); 
        mp.pause(); 
       } 
       else 
       { 
        nv.setViewVisibility(R.id.play, View.INVISIBLE); 
        nv.setViewVisibility(R.id.pause, View.VISIBLE); 
        mp.start(); 
       } 

      } 
     } 
+0

この条件でelseを試してくださいelseの代わりにelse if(!mp.isPlaying()) – Abhishek

+0

@Abhishekメディアプレーヤーが一時停止しても一時停止ボタンが表示されます。 – zek54

答えて

0

それを試してみてください!!!!

@Override 

public void onReceive(Context context, Intent intent) { 
Notification notification = null; 
     String action = intent.getAction(); 

     if(action.equalsIgnoreCase("com.example.app.ACTION_PLAY")){ 
      if(mp.isPlaying()) 
      { 
       notification.contentView.setViewVisibility(R.id.pause, View.INVISIBLE); 
       notification.contentView.setViewVisibility(R.id.play, View.VISIBLE); 
       mp.pause(); 
      } 
      else 
      { 
       notification.contentView.setViewVisibility(R.id.play, View.INVISIBLE); 
       notification.contentView.setViewVisibility(R.id.pause, View.VISIBLE); 
       mp.start(); 
      } 

     } 
    } 
+0

それは動作しません。ブロードキャストレシーバクラスで同じ通知オブジェクトを取得する方法はありますか? – zek54

0

リモートビューをリフレッシュするために、再び前面に別のアイコンを新しいnotificationを投稿することができます。

RemoteViewsを使用できますが、RemoteViewの内容を変更した後にstartForeground(NOTIFICATION_ID, mNotification);を呼び出す必要があります。


私はそれがnotificationParcelを介してシステム通知と通信しているため、コンテンツが新しいインスタンスに複製されていると思います。

+0

レシーバクラスで通知オブジェクトを取得する方法は? – zek54

+0

'Receiver'があなたの内部クラスであれば、簡単にアクセスできます。または、新しい再生状態で新しい通知をポストするために、メディアサービスへのコールバックを設定することもできます。 – sakiM

+0

共通のフォアグラウンド通知ガイド[こちら](http://stackoverflow.com/questions/6397754/android-implementing-startforeground-for-a-service)があります。このようにして、 'notification 'をあなたが好きな場所に保存することができます。 – sakiM

関連する問題