Android appwidget does not start service when ran -


the problem having when debug widget, changes layout, when run it, doesn't work. according debug messages, sets setonclickpendingintent not start service.

in short, widget works when debugging.

here widget code:

    public class widget extends appwidgetprovider {      public static string switch_screen1 = "1";     public static string switch_screen2 = "2";      public static final string add_note = "addnote";     public static final string manage_reminders = "managereminders";     public static string take_picture = "takepicture";       private static int layoutid = r.layout.widget_screen1;      /**      * method called when widget added home screen.      * sets listeners on items , updates screen info database      */     @override     public void onenabled(context context) {         super.onenabled(context);         setlisteners(context);         updatescreenfromdatabase(context, appwidgetmanager.getinstance(context), appwidgetmanager.getinstance(context).getappwidgetids(new componentname(context, widget.class)));     }       /**      * method called update widget. widget called when timeout set in widget.xml occurs.      */     @override     public void onupdate(context context, appwidgetmanager appwidgetmanager,int[] appwidgetids) {         super.onupdate(context, appwidgetmanager, appwidgetids);         updatescreenfromdatabase(context, appwidgetmanager, appwidgetids);     }      /**      * method fetches data database , puts in 2 text elements on screen      * @param context      * @param appwidgetmanager      * @param appwidgetids      */     private static void updatescreenfromdatabase(context context, appwidgetmanager appwidgetmanager,int[] appwidgetids) {         if(layoutid == r.layout.widget_screen1){             remoteviews views = new remoteviews(context.getpackagename(), layoutid);             for(int = 0 ; < appwidgetids.length ; i++){                 string currentlesson = "no current lesson";                 string nextlesson = "no next lesson";                 lessonhour[] hours = database.getinstance(context).getcurrentandnextlessonhour();                 if(hours[0] != null){                     currentlesson = hours[0].getstart().get(gregoriancalendar.hour_of_day) + ":" + utils.adjustminutes(hours[0].getstart().get(gregoriancalendar.minute)) + " " + hours[0] .getlesson().getsummary();                 }                 if(hours[1] != null){                     nextlesson = hours[1].getstart().get(gregoriancalendar.hour_of_day) + ":" +  utils.adjustminutes(hours[1].getstart().get(gregoriancalendar.minute)) + " " + hours[1] .getlesson().getsummary();                 }                 views.settextviewtext(r.id.txt_widget_lesson1, currentlesson);                 views.settextviewtext(r.id.txt_widget_lesson2, nextlesson);                  appwidgetmanager.updateappwidget(new componentname(context, widget.class), views);               }         }      }        /**      * method called when screen of widget should change.      * action tells method screen should change.       * @param context      * @param action: screen method should switch to. either widget_screen1 or widget_screen2      */     public static void buildupdate(context context, string action){         remoteviews views;         if(action.equals(switch_screen1)){             views =  new remoteviews(context.getpackagename(), r.layout.widget_screen1);             appwidgetmanager.getinstance(context).updateappwidget(new componentname(context, widget.class), views);             layoutid = r.layout.widget_screen1;             updatescreenfromdatabase(context, appwidgetmanager.getinstance(context), appwidgetmanager.getinstance(context).getappwidgetids(new componentname(context, widget.class)));         }         else if(action.equals(switch_screen2)){             views =  new remoteviews(context.getpackagename(), r.layout.widget_screen2);             appwidgetmanager.getinstance(context).updateappwidget(new componentname(context, widget.class), views);             layoutid = r.layout.widget_screen2;         }         setlisteners(context);     }     /**      * methods sets onclick listeners elements displayed on screen      * @param context      */     private static void setlisteners(context context){         appwidgetmanager manager = appwidgetmanager.getinstance(context);         int[] appwidgetids = manager.getappwidgetids(new componentname(context, widget.class));          (int = 0 ; < appwidgetids.length; i++){              if(layoutid == r.layout.widget_screen1){                 log.e("khlrooster", "setting listeners on widget screen 1");                 remoteviews views = new remoteviews(context.getpackagename(), layoutid);                  intent intent = new intent(context, switchwidgetscreenservice.class);                 intent.setaction(switch_screen2);                 intent.setdata(uri.parse("uri::" + math.random()));                 log.e("khlrooster", "action of listener screen 1: " + intent.getaction());                 pendingintent pi = pendingintent.getservice(context, 0, intent, intent.flag_activity_new_task);                 views.setonclickpendingintent(r.id.imgbtn_switchdown, pi);                 views.setonclickpendingintent(r.id.imgbtn_widget_notification, pi);                  manager.updateappwidget(new componentname(context, widget.class), views);                 log.e("khlrooster", "listeners set on widget screen 1");             }              else if(layoutid == r.layout.widget_screen2){                 log.e("khlrooster", "setting listeners on widget screen 2");                 remoteviews views = new remoteviews(context.getpackagename(), layoutid);                 intent intent2 = new intent(context, switchwidgetscreenservice.class);                 intent2.setaction(switch_screen1);                               pendingintent pendingintent = pendingintent.getservice(context, 0, intent2, 0);                 views.setonclickpendingintent(r.id.imgbtn_switchup, pendingintent);                  intent2 = new intent(context, lessondetail.class);                 intent2.setaction(add_note);                 pendingintent = pendingintent.getactivity(context, 0, intent2, 0);                 views.setonclickpendingintent(r.id.imgbtn_notes, pendingintent);                  intent2= new intent(context, lessondetail.class);                 intent2.setaction(take_picture);                 pendingintent = pendingintent.getactivity(context, 0, intent2, 0);                 views.setonclickpendingintent(r.id.imgbtn_photo, pendingintent);                                  manager.updateappwidget(new componentname(context, widget.class), views);                 log.e("khlrooster", "listeners set on widget screen 2");             }          }     }   } 

and here service responding intents:

public class switchwidgetscreenservice extends service {  @override public ibinder onbind(intent arg0) {     // todo auto-generated method stub     return null; }  @override public void oncreate() {     super.oncreate();     log.e("khlrooster", "created switchwidgetscreenservice"); }  @override public void onstart(intent intent, int startid) {     //super.onstart(intent, startid);     log.e("khlrooster", "started switchwidgetscreenservice");     handleevent(intent); }  @override public int onstartcommand(intent intent, int flags, int startid) {     handleevent(intent);     log.e("khlrooster", "started switchwidgetscreenservice");     return super.onstartcommand(intent, flags, startid); }  private void handleevent(intent intent) {     log.e("khlrooster", "it works, screen changes to: " + intent.getaction());     if(intent.getaction().equals(widget.switch_screen1)){         widget.buildupdate(this, widget.switch_screen1);     }else if(intent.getaction().equals(widget.switch_screen2)){         widget.buildupdate(this, widget.switch_screen2);     } } 

}

i solved problem, called setlisteners once more after getting data db.


Comments

Popular posts from this blog

c# - How to set Z index when using WPF DrawingContext? -

razor - Is this a bug in WebMatrix PageData? -

visual c++ - Using relative values in array sorting ( asm ) -