2017-06-13 3 views
-2

Je suis d'essayer d'implémenter le widget horloge numérique. quand je fais glisser un widget d'horloge sur mon écran Hone à ce moment-là, il prend un espace sur l'écran d'accueil, mais quand l'horloge du système met à jour son heure à l'heure mon horloge de widget est affichée comme un widget ex. l'heure de l'horloge mobile est 2:10 et je fais glisser mon widget sur l'écran et son ne pas afficher lorsque l'horloge du système est 2:11 à ce moment-là mon affichage de widget sur l'écran d'accueil. Voici mon code clockwidget.Android Widget Horloge numérique

Clockwidget.java

public class ClockWidget extends AppWidgetProvider { 

@Override 
public void onDisabled(Context context) { 
    super.onDisabled(context); 
    context.stopService(new Intent(context, UpdateService.class)); 
} 


@Override 
public void onEnabled(Context context) { 
    super.onEnabled(context); 
    // context.startService(new Intent(UpdateService.ACTION_UPDATE)); 
    context.startService(new Intent(context, UpdateService.class)); 


} 


@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    super.onUpdate(context, appWidgetManager, appWidgetIds); 
    // context.startService(new Intent(UpdateService.ACTION_UPDATE)); 
    context.startService(new Intent(context, UpdateService.class)); 

} 


public static final class UpdateService extends Service { 

    static final String ACTION_UPDATE = "com.example.kevan.mywidget.action.UPDATE"; 

    private final static IntentFilter sIntentFilter; 

    private final static String FORMAT_12_HOURS = "h:mm"; 
    private final static String FORMAT_24_HOURS = "kk:mm"; 

    private String mTimeFormat; 
    private String mDateFormat; 
    private Calendar mCalendar; 
    private String mAM, mPM; 

    static { 
     sIntentFilter = new IntentFilter(); 
     sIntentFilter.addAction(Intent.ACTION_TIME_TICK); 
     sIntentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED); 
     sIntentFilter.addAction(Intent.ACTION_TIME_CHANGED); 
    } 


    @Override 
    public void onCreate() { 
     super.onCreate(); 
     reinit(); 
     registerReceiver(mTimeChangedReceiver, sIntentFilter); 

    } 


    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     unregisterReceiver(mTimeChangedReceiver); 
    } 


    @Override 
    public void onStart(Intent intent, int startId) { 
     super.onStart(intent, startId); 

     if (ACTION_UPDATE.equals(intent.getAction())) { 
      update(); 
     } 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 


    private void update() { 
     mCalendar.setTimeInMillis(System.currentTimeMillis()); 
     final CharSequence time = DateFormat.format(mTimeFormat, mCalendar); 
     final CharSequence date = DateFormat.format(mDateFormat, mCalendar); 

     RemoteViews views = new RemoteViews(getPackageName(), R.layout.main); 
     views.setTextViewText(R.id.Time, time); 
     views.setTextViewText(R.id.Date, date); 

     if (!is24HourMode(this)) { 
      final boolean isMorning = (mCalendar.get(Calendar.AM_PM) == 0); 
      views.setTextViewText(R.id.AM_PM, (isMorning ? mAM : mPM)); 
     } else { 
      views.setTextViewText(R.id.AM_PM, ""); 
     } 

     ComponentName widget = new ComponentName(this, ClockWidget.class); 
     AppWidgetManager manager = AppWidgetManager.getInstance(this); 
     manager.updateAppWidget(widget, views); 
    } 

    private void reinit() { 
     final String[] ampm = new DateFormatSymbols().getAmPmStrings(); 
     mDateFormat = getString(R.string.date_format); 
     mTimeFormat = is24HourMode(this) ? FORMAT_24_HOURS : FORMAT_12_HOURS; 
     mCalendar = Calendar.getInstance(); 
     mAM = ampm[0].toLowerCase(); 
     mPM = ampm[1].toLowerCase(); 
    } 

    private static boolean is24HourMode(final Context context) { 
     return DateFormat.is24HourFormat(context); 
    } 


    private final BroadcastReceiver mTimeChangedReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      final String action = intent.getAction(); 

      if (action.equals(Intent.ACTION_TIME_CHANGED) || 
        action.equals(Intent.ACTION_TIMEZONE_CHANGED)) { 

       reinit(); 
      } 

      update(); 
     } 
    }; 
} 

}

Répondre

0

bien. Cela signifie que lorsque l'heure système est modifiée à ce moment-là, votre widget est en cours de mise à jour. Il peut donc être mis à jour pour la première fois lorsque l'heure est modifiée. donc ma suggestion à vous est que vous devriez mettre à jour votre service à la première fois au moment onCreate après qu'il sera mis à jour lorsque l'heure a changé. afin que votre problème puisse être résolu. essayez-le.

+0

donnez-moi du code selon mon code. –

+0

at on Créer dans votre code s'il vous plaît ajouter ce code update(); –