android - Notification using RemoteViews not working -


i trying issue customized notification ( has play-pause, next , previous buttons). not seem work:

  • what want : issue custom notification play-pause, next , previous buttons, activity. activity has working mediaplayer

  • what problem : notification not issued @ all.

  • what have done : calling following code activity oncreate() once mediaplayer complete:

any appreciated. !!

    private void sendnotification() {          log.v(logtag, "inside sendnotification");          // creating remoteview , inflating custom xml layout file             remoteviews notificationviews = new remoteviews(getpackagename(), r.layout.notification);          updating fields in layout file         notificationviews.settextviewtext(r.id.songnametextviewnotify, trackinfo.gettrack());         notificationviews.setimageviewuri(r.id.songimageviewnotify, uri.parse(trackinfo.getalbumimageurl()));          // notification builder             notificationcompat.builder builder = new notificationcompat.builder(this).                 setcontent(notificationviews);                  // pending intent call class                 // intent caught in onnewintent() method         intent intent = new intent(this, musicplayer.class);         pendingintent pendingintent = pendingintent.getactivity(this, 0, intent,                 pendingintent.flag_update_current);         notificationviews.setonclickpendingintent(r.id.playpausebuttomnotify, pendingintent);          // issuing new notification             notificationmanager notificationmanager = (notificationmanager)                 getsystemservice(context.notification_service);         log.v(logtag, "sending notification");         notificationmanager.notify(notification_id, builder.build());      } 

notification.xml

<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="horizontal">      <imageview         android:id="@+id/songimageviewnotify"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:src="@drawable/no_image"/>      <linearlayout         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:orientation="vertical">          <textview             android:id="@+id/songnametextviewnotify"             android:layout_width="fill_parent"             android:layout_height="wrap_content"             android:text="@string/app_name"             android:gravity="center"/>           <linearlayout             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:orientation="horizontal">              <imagebutton                 android:id="@+id/previousbuttomnotify"                 android:layout_width="wrap_content"                 android:layout_height="wrap_content"                 android:src="@android:drawable/ic_media_previous"                 android:onclick="playprevioustracknotify"/>              <view                 android:layout_width="0dp"                 android:layout_height="match_parent"                 android:layout_weight="1" />              <imagebutton                 android:id="@+id/playpausebuttomnotify"                 android:layout_width="wrap_content"                 android:layout_height="wrap_content"                 android:src="@android:drawable/ic_media_pause"                 android:onclick="playorpausenotify"/>              <view                 android:layout_width="0dp"                 android:layout_height="match_parent"                 android:layout_weight="1" />              <imagebutton                 android:id="@+id/nextbuttomnotify"                 android:layout_width="wrap_content"                 android:layout_height="wrap_content"                 android:src="@android:drawable/ic_media_next"                 android:onclick="playnexttracknotify"/>          </linearlayout>      </linearlayout>  </linearlayout> 

full content of musicplayer.java

 package com.example.deep.musico;  import android.app.notification; import android.app.notificationmanager; import android.app.pendingintent; import android.content.context; import android.content.intent; import android.media.audiomanager; import android.media.mediaplayer; import android.net.uri; import android.net.wifi.wifimanager; import android.os.handler; import android.os.powermanager; import android.support.v4.app.notificationcompat; import android.support.v7.app.actionbaractivity; import android.os.bundle; import android.util.log; import android.view.menu; import android.view.menuitem; import android.view.view; import android.widget.imagebutton; import android.widget.imageview; import android.widget.remoteviews; import android.widget.seekbar; import android.widget.textview;  import com.squareup.picasso.picasso;  import java.io.ioexception; import java.util.arraylist; import java.util.concurrent.timeunit;   public class musicplayer extends actionbaractivity implements mediaplayer.onpreparedlistener {      private int playtrack;     private arraylist<trackinfo> tracklist ;      public static final string play_url = "url";     private static final string logtag = "musicplayer";     private static int elapsedtime ;     private static int remainingtime;      textview artistname;     textview albumname;     imageview albumimage;     textview songname;     seekbar songprogress;     textview starttime;     textview endtime;     imagebutton previoussong;     imagebutton playpause;     imagebutton nextsong;     trackinfo trackinfo;      mediaplayer mediaplayer;     wifimanager.wifilock wifilock;     handler seekbarhandler = new handler();     private int notification_id = 1;      private runnable seekbarupdate = new runnable() {         @override         public void run() {             if(mediaplayer != null) {                  elapsedtime = (int) mediaplayer.getcurrentposition();                 remainingtime = (int) mediaplayer.getduration() - elapsedtime;  //                log.v(logtag, "elapsed time runnable : " + mediaplayer.getcurrentposition()); //                log.v(logtag, "remaining time runnable : " + remainingtime);                  string formattimestart = string.format("%d:%d",                         timeunit.milliseconds.tominutes(elapsedtime),                         timeunit.milliseconds.toseconds(elapsedtime) -                                 timeunit.minutes.toseconds(timeunit.milliseconds.tominutes(elapsedtime)));                  string formattimeend = string.format("%d:%d",                         timeunit.milliseconds.tominutes(remainingtime),                         timeunit.milliseconds.toseconds(remainingtime) -                                 timeunit.minutes.toseconds(timeunit.milliseconds.tominutes(remainingtime)));                  log.v(logtag, "formatted start time : " + formattimestart);                 log.v(logtag, "formatted end time : " + formattimeend);                  starttime.settext(formattimestart);                 endtime.settext(formattimeend);                  songprogress.setprogress(elapsedtime);                 seekbarhandler.postdelayed(seekbarupdate, 50);             }         }     };      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_music_player);          playtrack = getintent().getintextra(songsactivityfragment.play_track, 0);         tracklist = getintent().getparcelablearraylistextra(songsactivityfragment.all_tracks);          init();         init(playtrack);          sendnotification();  //        intent intent = new intent(this, playmusicservice.class); //        intent.putextra(play_url, tracklist.get(playtrack).getpreviewurl()); //        startservice(intent);     }      @override     protected void onnewintent(intent intent) {         super.onnewintent(intent);          log.v(logtag, "in new pending intent ");     }      private void sendnotification() {          log.v(logtag, "inside sendnotification");          remoteviews notificationviews = new remoteviews(getpackagename(), r.layout.notification);          notificationviews.settextviewtext(r.id.songnametextviewnotify, trackinfo.gettrack());         notificationviews.setimageviewuri(r.id.songimageviewnotify, uri.parse(trackinfo.getalbumimageurl()));          notificationcompat.builder builder = new notificationcompat.builder(this).                 setcontent(notificationviews);          intent intent = new intent(this, musicplayer.class);         pendingintent pendingintent = pendingintent.getactivity(this, 0, intent,                 pendingintent.flag_update_current);         notificationviews.setonclickpendingintent(r.id.playpausebuttomnotify, pendingintent);          notificationmanager notificationmanager = (notificationmanager)                 getsystemservice(context.notification_service);         log.v(logtag, "sending notification");         notificationmanager.notify(notification_id, builder.build());      }      private void init() {          artistname = (textview) findviewbyid(r.id.artistnametextview);         albumname = (textview) findviewbyid(r.id.albumnametextview);         albumimage = (imageview) findviewbyid(r.id.albumimageview);         songname = (textview) findviewbyid(r.id.songnametextview);         songprogress = (seekbar) findviewbyid(r.id.songprogressbar);         starttime = (textview) findviewbyid(r.id.starttimetextview);         endtime = (textview) findviewbyid(r.id.endtimetextview);         previoussong = (imagebutton) findviewbyid(r.id.previousbuttom);         playpause = (imagebutton) findviewbyid(r.id.playpausebuttom);         nextsong = (imagebutton) findviewbyid(r.id.nextbuttom);          mediaplayer = new mediaplayer();         mediaplayer.setaudiostreamtype(audiomanager.stream_music);         mediaplayer.setwakemode(this, powermanager.partial_wake_lock);         mediaplayer.setonpreparedlistener(this);          wifilock = ((wifimanager) getsystemservice(wifi_service)).                 createwifilock(wifimanager.wifi_mode_full, "musiclock");         wifilock.acquire();     }      private void init(int tracknumber){          if(mediaplayer != null && mediaplayer.isplaying()){             mediaplayer.stop();         }          trackinfo = tracklist.get(tracknumber);          artistname.settext(trackinfo.getartist());         albumname.settext(trackinfo.getalbum());          if(! (trackinfo.getalbumimageurl().equals(""))) {             picasso.with(this).load(trackinfo.getalbumimageurl()).into(albumimage);         }          elapsedtime = 0;         starttime.settext(string.valueof(elapsedtime));          remainingtime = (int) mediaplayer.getduration();         endtime.settext(string.valueof(remainingtime));          songname.settext(trackinfo.gettrack());         songprogress.setprogress(elapsedtime);  //        moving below line runnable because mediaplayer.getduration() not return right value         songprogress.setmax(30 * 1000);          log.v(logtag, "duration track info : " + string.valueof(trackinfo.getduration()));         log.v(logtag, "duration mediaplayer : " +string.valueof(mediaplayer.getduration()));          log.v(logtag, trackinfo.getpreviewurl());         try {             mediaplayer.setdatasource(trackinfo.getpreviewurl());         } catch (ioexception e) {             e.printstacktrace();         }          mediaplayer.prepareasync();          songprogress.setonseekbarchangelistener(new seekbar.onseekbarchangelistener() {             @override             public void onprogresschanged(seekbar seekbar, int progress, boolean fromuser) {                  if(fromuser){                     mediaplayer.seekto(progress);                 }                  elapsedtime = (int) mediaplayer.getcurrentposition();                 remainingtime = (int) mediaplayer.getduration() - elapsedtime;  //                log.v(logtag, "elapsed time runnable : " + mediaplayer.getcurrentposition()); //                log.v(logtag, "remaining time runnable : " + remainingtime);                  string formattimestart = string.format("%d:%d",                         timeunit.milliseconds.tominutes(elapsedtime),                         timeunit.milliseconds.toseconds(elapsedtime) -                                 timeunit.minutes.toseconds(timeunit.milliseconds.tominutes(elapsedtime)));                  string formattimeend = string.format("%d:%d",                         timeunit.milliseconds.tominutes(remainingtime),                         timeunit.milliseconds.toseconds(remainingtime) -                                 timeunit.minutes.toseconds(timeunit.milliseconds.tominutes(remainingtime)));                  log.v(logtag, "formatted start time : " + formattimestart);                 log.v(logtag, "formatted end time : " + formattimeend);                  starttime.settext(formattimestart);                 endtime.settext(formattimeend);             }              @override             public void onstarttrackingtouch(seekbar seekbar) {              }              @override             public void onstoptrackingtouch(seekbar seekbar) {              }         });     }      public void playprevioustrack(view view){          mediaplayer.reset();          if(playtrack == 0) {             playtrack = tracklist.size() - 1;         } else {             playtrack = playtrack - 1;         }          init(playtrack);     }      public void playnexttrack(view view){          mediaplayer.reset();          if(playtrack == tracklist.size() - 1) {             playtrack = 0;         } else {             playtrack = playtrack + 1;         }          init(playtrack);     }      public void playorpause(view view){          if(mediaplayer.isplaying()) {             playpause.setimageresource(android.r.drawable.ic_media_play);             mediaplayer.pause();         } else {             playpause.setimageresource(android.r.drawable.ic_media_pause);             mediaplayer.start();         }     }      @override     public boolean oncreateoptionsmenu(menu menu) {         // inflate menu; adds items action bar if present.         getmenuinflater().inflate(r.menu.menu_music_player, menu);         return true;     }      @override     public boolean onoptionsitemselected(menuitem item) {         // handle action bar item clicks here. action bar         // automatically handle clicks on home/up button, long         // specify parent activity in androidmanifest.xml.         int id = item.getitemid();          //noinspection simplifiableifstatement         if (id == r.id.action_settings) {             return true;         }          return super.onoptionsitemselected(item);     }      @override     public void onprepared(mediaplayer mp) {          mediaplayer.start();         seekbarhandler.postdelayed(seekbarupdate, 50);     }      @override     protected void ondestroy() {         super.ondestroy();          mediaplayer.release();         mediaplayer = null;          wifilock.release();     } } 


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -