0

クリックしたときに同じサービスにブロードキャストが送信され、boradcast受信側のクラスで再生中の曲を停止したいという通知を追加します。しかし、私は受信者が受信する放送を得ることができません。詳細な解決策が高く評価されます。保留中の意図でブロードキャストが通知なしで動作しない

package com.example.ranasarmadrajput.servicestask; 

import android.content.Intent; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.net.Uri; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Intent i = getIntent(); 
     if(i.getAction().equals("playpause")){ 
      Toast.makeText(this,"sss",Toast.LENGTH_LONG).show(); 
     } 
    } 
    public void selectsong(View view){ 
     Intent intent= new Intent(android.content.Intent.ACTION_GET_CONTENT); 
     String type = "audio/*"; 
     intent.setType(type); 
     startActivityForResult(intent,2); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == 2) { 
      if (data != null) { 
       Intent intent = new Intent(this,musicplayer.class); 
       intent.setAction("Play"); 
       intent.setData(data.getData()); 
       startService(intent); 

      } 
     } 
    }} 

とサービスクラス

package com.example.ranasarmadrajput.servicestask; 

import android.app.IntentService; 
import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.BroadcastReceiver; 
import android.content.Intent; 
import android.content.Context; 
import android.content.IntentFilter; 
import android.graphics.Bitmap; 
import android.graphics.drawable.BitmapDrawable; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.media.session.MediaSession; 
import android.net.Uri; 
import android.support.v4.app.NotificationCompat; 
import android.support.v4.app.NotificationCompatBase; 
import android.widget.Toast; 

/** 
* An {@link IntentService} subclass for handling asynchronous task requests in 
* a service on a separate handler thread. 
* <p> 
* TODO: Customize class - update intent actions, extra parameters and static 
* helper methods. 
*/ 
public class musicplayer extends IntentService { 
    MediaPlayer mp; 

    public musicplayer() { 
     super("musicplayer"); 
    } 


    @Override 
    protected void onHandleIntent(Intent intent) { 
     if (intent != null) { 
      final String action = intent.getAction(); 
      if (action.equals("Play")) { 
       try { 
        Uri u= intent.getData(); 
        mp = new MediaPlayer(); 
        mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
        if (u != null) { 
         mp.setDataSource(getApplicationContext(), u); 
         mp.prepare(); 
         mp.start(); 
         mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
          @Override 
          public void onCompletion(MediaPlayer mp) { 
           mp.release(); 
          } 
         }); 
        } else { 
         Toast.makeText(this, "Data is null...", Toast.LENGTH_SHORT).show(); 
        } 
        Intent in=new Intent(this,ReceiverClassName.class); 
        in.setAction("playpause"); 
        PendingIntent pi=PendingIntent.getBroadcast(this,0,in,0); 
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this) 
          .setContentTitle("title") 
          .setContentText("text") 
          .setAutoCancel(true) 
          .setSmallIcon(R.mipmap.ic_launcher) 
          .addAction(R.mipmap.ic_launcher,"sss",pi); 

        Notification notification = builder.build(); 
        NotificationManager manager = (NotificationManager) 
          getSystemService(Context.NOTIFICATION_SERVICE); 
        manager.notify(22, notification); 
       } catch (Exception exception) { 
        exception.printStackTrace(); 
        Toast.makeText(this, "Error", Toast.LENGTH_SHORT).show(); 
       } 
       /*IntentFilter filter = new IntentFilter(); 
       filter.addAction("playpause"); 
       registerReceiver(new ReceiverClassName(), filter);*/ 

      } 
     } 
    } 

    public class ReceiverClassName extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String Action = intent.getAction(); 
      if(Action.equals("playpause")){ 
       mp.stop(); 

      } 
     } 
    } 
} 

答えて

0

あなたのPendingIntentにPendingIntent.FLAG_CANCEL_CURRENTフラグを追加する必要があり、それを修正するには、Googleのコードにhttps://code.google.com/p/android/issues/detail?id=61850

をこのスレッドに従ってください。

PendingIntent stopPendingIntent2 = PendingIntent.getBroadcast(this, 0, 
      stopIntent2, PendingIntent.FLAG_CANCEL_CURRENT); 
関連する問題