I'm new to android development.I'm trying control music player with notification.till now,I have completed Songs list in a activity.when starts playing the foreground service is working fine and it is calling action by pending intent.my problem is when i click pause button service intent is called but,i could call main actitivy callPause() but it's showing null refrence for every datas.
public class PlayerIntentService extends Service {
private static final String TAG = "ExampleJobIntentService";
private ModelSong currentSong;
private PendingIntent pendingIntent, playIntent, nextIntent, previousIntent,broadCastIntent;
private MediaSessionCompat mediaSession;
private boolean isPlay=true;
@Override
public void onCreate() {
super.onCreate();
mediaSession = new MediaSessionCompat(this, "Tag");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
currentSong = intent.getParcelableExtra("songData");
if (intent.getAction() != null) {
if (intent.getAction().equals("ACTION.PREV_ACTION"))
Toast.makeText(this, "Clicked Previous", Toast.LENGTH_SHORT).show();
else if (intent.getAction().equals("ACTION.PLAY_ACTION")) {
isPlay =!isPlay;
new MainActivity().playPause();
Toast.makeText(this, "From here i want to call mainActivity callPause()", Toast.LENGTH_SHORT).show();
} else
Toast.makeText(this, "Clicked Previous", Toast.LENGTH_SHORT).show();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
startMyOwnForeground();
else
showNotification();
//do heavy work on a background thread
//stopSelf();
return START_STICKY;
}
private void showNotification() {
startForeground(1, new Notification());
}
@RequiresApi(api = Build.VERSION_CODES.O)
private void startMyOwnForeground() {
initPendingIntents();
String NOTIFICATION_CHANNEL_ID = "com.example.simpleapp";
String channelName = "My Background Service";
NotificationChannel chan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, channelName, NotificationManager.IMPORTANCE_NONE);
chan.setLightColor(Color.BLUE);
chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
assert manager != null;
manager.createNotificationChannel(chan);
Bitmap artwork = BitmapFactory.decodeResource(getResources(), R.drawable.vijay);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
Notification notification = notificationBuilder.setOngoing(true)
.setSmallIcon(R.drawable.search_icon)
.setLargeIcon(artwork)
.setContentIntent(pendingIntent)
.setContentTitle("Song Tile")
.setContentText("Artist name")
.addAction(R.drawable.previous, "Previous", previousIntent)
.addAction(isPlay ? R.drawable.ic_pause_black_24dp : R.drawable.ic_play_arrow, "play", playIntent)
.addAction(R.drawable.next, "Next", nextIntent)
.setStyle(new androidx.media.app.NotificationCompat.MediaStyle().setShowActionsInCompactView(1)
.setMediaSession(mediaSession.getSessionToken()))
.setPriority(NotificationManager.IMPORTANCE_MIN)
.setCategory(Notification.CATEGORY_SERVICE)
.build();
startForeground(2, notification);
}
private void initPendingIntents() {
Intent notificationIntent = new Intent(this, MainActivity.class);
pendingIntent = PendingIntent.getActivity(this,
0, notificationIntent, 0);
Intent previous = new Intent(this, PlayerIntentService.class);
previous.setAction("ACTION.PREV_ACTION");
previousIntent = PendingIntent.getService(this, 1,
previous, 0);
Intent play = new Intent(this, PlayerIntentService.class);
play.setAction("ACTION.PLAY_ACTION");
playIntent = PendingIntent.getService(this, 2,
play, 0);
Intent next = new Intent(this, PlayerIntentService.class);
next.setAction("ACTION.PREVIOUS_ACTION");
nextIntent = PendingIntent.getService(this, 3,
next, 0);
Intent broadcastReceiver = new Intent(this, PlayerReceiver.class);
broadcastReceiver.setAction("ACTION.BROADCAST_ACTION");
broadCastIntent = PendingIntent.getBroadcast(this, 4,
broadcastReceiver, 0);
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
stopSelf();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
public void playPause() {
if (mediaPlayer.isPlaying()) {
imgPlayPause.setImageResource(R.drawable.play);
playPauseN.setImageResource(R.drawable.ic_play_arrow);
mediaPlayer.pause();
adSongs.clearSelection();
} else {
imgPlayPause.setImageResource(R.drawable.pause);
playPauseN.setImageResource(R.drawable.ic_pause_black_24dp);
adSongs.updateSelection(currentSongIndex);
mediaPlayer.start();
}
}
java.lang.RuntimeException: Unable to start service com.gowtham.musicplayerwithservice.adapters.PlayerIntentService@b738326 with Intent { act=ACTION.PLAY_ACTION flg=0x10000000 cmp=com.gowtham.musicplayerwithservice/.adapters.PlayerIntentService bnds=[186,750][330,894] }: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.media.MediaPlayer.isPlaying()' on a null object reference
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3687)
at android.app.ActivityThread.access$1600(ActivityThread.java:200)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1682)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.media.MediaPlayer.isPlaying()' on a null object reference
at com.gowtham.musicplayerwithservice.activities.MainActivity.playPause(MainActivity.java:482)
at com.gowtham.musicplayerwithservice.adapters.PlayerIntentService.onStartCommand(PlayerIntentService.java:65)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3668)
at android.app.ActivityThread.access$1600(ActivityThread.java:200)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1682)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
User contributions licensed under CC BY-SA 3.0