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
Post a Comment