2015-12-09 5 views
0

J'ai un widget qui fonctionne bien. Tout est ok sauf si je redémarre le téléphone. Si je redémarre le téléphone, le widget n'affiche aucune donnée. Je cherche ici une réponse mais tout ce que j'ai trouvé ne fonctionne pas pour moi. Quelqu'un peut jeter un oeil à mon code et me dire où est le problème?Widget ne fonctionne pas lors du redémarrage du téléphone?

Merci d'avance.

C'est ma classe:

@Override 
public void onReceive(Context context, Intent intent) { 
    if (intent.hasExtra(WIDGET_IDS_KEY_RIGHT)) { 
     int[] ids = intent.getExtras().getIntArray(WIDGET_IDS_KEY_RIGHT); 
     if (intent.hasExtra(WIDGET_DATA_KEY_RIGHT)) { 
      Object data = intent.getExtras().getParcelable(WIDGET_DATA_KEY_RIGHT); 
      this.update(context, AppWidgetManager.getInstance(context), ids, data); 
     } else { 
      this.onUpdate(context, AppWidgetManager.getInstance(context), ids); 
     } 
    } else super.onReceive(context, intent); 

    if (intent.hasExtra(WIDGET_IDS_KEY_LEFT)) { 
     int[] ids = intent.getExtras().getIntArray(WIDGET_IDS_KEY_LEFT); 
     if (intent.hasExtra(WIDGET_IDS_KEY_LEFT)) { 
      Object data = intent.getExtras().getParcelable(WIDGET_DATA_KEY_LEFT); 
      this.update(context, AppWidgetManager.getInstance(context), ids, data); 
     } else { 
      this.onUpdate(context, AppWidgetManager.getInstance(context), ids); 
     } 
    } else super.onReceive(context, intent); 

    if (intent.hasExtra(WIDGET_IDS_KEY_CENTRAL)) { 
     int[] ids = intent.getExtras().getIntArray(WIDGET_IDS_KEY_CENTRAL); 
     if (intent.hasExtra(WIDGET_IDS_KEY_CENTRAL)) { 
      Object data = intent.getExtras().getParcelable(WIDGET_DATA_KEY_CENTRAL); 
      this.update(context, AppWidgetManager.getInstance(context), ids, data); 
     } else { 
      this.onUpdate(context, AppWidgetManager.getInstance(context), ids); 
     } 
    } else super.onReceive(context, intent); 

} 


@Override 
public void onEnabled(Context context) { 
    super.onEnabled(context); 

    startWidgetUpdateService(context); 
} 

protected static void startWidgetUpdateService(Context context) { 
    Intent serviceIntent = new Intent(context, SimpleWidgetProvider.class); 
    context.startService(serviceIntent); 
} 

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 

    update(context, appWidgetManager, appWidgetIds, null); 

} 

public void update(Context context, AppWidgetManager manager, int[] ids, Object data) { 

    for (int appWidgetId : ids) { 

     preferences = PreferenceManager.getDefaultSharedPreferences(context); 
     numberRight = preferences.getString(HmApplication.PREF_NUMBER_RIGHT, ""); 
     numberCentral = preferences.getString(HmApplication.PREF_NUMBER_CENTRAL, ""); 
     numberLeft = preferences.getString(HmApplication.PREF_NUMBER_LEFT, ""); 

     Intent callIntentRight = new Intent(Intent.ACTION_CALL); 
     callIntentRight.setData(Uri.parse("tel:" + numberRight)); 
     Intent callIntentCentral = new Intent(Intent.ACTION_CALL); 
     callIntentCentral.setData(Uri.parse("tel:" + numberCentral)); 
     Intent callIntentLeft = new Intent(Intent.ACTION_CALL); 
     callIntentLeft.setData(Uri.parse("tel:" + numberLeft)); 

     PendingIntent pendingIntentRight = PendingIntent.getActivity(context, 0, callIntentRight, 0); 
     PendingIntent pendingIntentCentral = PendingIntent.getActivity(context, 0, callIntentCentral, 0); 
     PendingIntent pendingIntentLeft = PendingIntent.getActivity(context, 0, callIntentLeft, 0); 


     preferences = PreferenceManager.getDefaultSharedPreferences(context); 
     isCheckedOne = preferences.getBoolean(HmApplication.PREF_CHECKBOX_ONE, false); 
     isCheckedTwo = preferences.getBoolean(HmApplication.PREF_CHECKBOX_TWO, false); 
     isCheckedThree = preferences.getBoolean(HmApplication.PREF_CHECKBOX_THREE, false); 



     views = new RemoteViews(context.getPackageName(), R.layout.simple_widget); 



     if(isCheckedOne == true){ 

      views = new RemoteViews(context.getPackageName(), R.layout.simple_widget_one); 
      views.setTextViewText(R.id.actionButtonLeft, Main.textNamePhoneLeft); 
     } 

     if(isCheckedTwo == true){ 
      views = new RemoteViews(context.getPackageName(), R.layout.simple_widget_two); 
      views.setTextViewText(R.id.actionButtonLeft, Main.textNamePhoneLeft); 
      views.setTextViewText(R.id.actionButtonCentral, Main.textNamePhoneCentral); 
     } 


      views.setOnClickPendingIntent(R.id.actionButtonRight, pendingIntentRight); 
      views.setOnClickPendingIntent(R.id.actionButtonCentral, pendingIntentCentral); 
      views.setOnClickPendingIntent(R.id.actionButtonLeft, pendingIntentLeft); 
      views.setTextViewText(R.id.actionButtonLeft, Main.textNamePhoneLeft); 
      views.setTextViewText(R.id.actionButtonCentral, Main.textNamePhoneCentral); 
      views.setTextViewText(R.id.actionButtonRight, Main.textNamePhoneRight); 

      manager.updateAppWidget(appWidgetId, views); 
    } 
} 

public void updateMyWidgets(Context context) { 
    AppWidgetManager man = AppWidgetManager.getInstance(context); 
    int[] ids = man.getAppWidgetIds(new ComponentName(context, SimpleWidgetProvider.class)); 

    preferences = PreferenceManager.getDefaultSharedPreferences(context); 
    numberRight = preferences.getString(HmApplication.PREF_NUMBER_RIGHT, ""); 
    numberCentral = preferences.getString(HmApplication.PREF_NUMBER_CENTRAL, ""); 
    numberLeft = preferences.getString(HmApplication.PREF_NUMBER_LEFT, ""); 

    Intent updateIntent = new Intent(); 
    updateIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 
    updateIntent.putExtra(SimpleWidgetProvider.WIDGET_IDS_KEY_RIGHT, ids); 
    updateIntent.putExtra(SimpleWidgetProvider.WIDGET_DATA_KEY_RIGHT, numberRight); 
    updateIntent.putExtra(SimpleWidgetProvider.WIDGET_IDS_KEY_CENTRAL, ids); 
    updateIntent.putExtra(SimpleWidgetProvider.WIDGET_DATA_KEY_CENTRAL, numberCentral); 
    updateIntent.putExtra(SimpleWidgetProvider.WIDGET_IDS_KEY_LEFT, ids); 
    updateIntent.putExtra(SimpleWidgetProvider.WIDGET_DATA_KEY_LEFT, numberLeft); 
    context.sendBroadcast(updateIntent); 
} 

Ceci est mon manifeste:

<receiver android:name=".SimpleWidgetProvider" 
     android:label="myWidget"> 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> 
      <action android:name="android.appwidget.action.APPWIDGET_ENABLED" /> 
     </intent-filter> 
     <meta-data android:name="android.appwidget.provider" 
      android:resource="@xml/simple_widget_info" /> 
    </receiver> 

Répondre

0

Mettre en œuvre le récepteur android.intent.action.BOOT_COMPLETED et la méthode onRecieve appeler votre méthode updateMyWidgets à jour le widget

Vous devez définir un récepteur dans le manifeste avec le nom d'action android.intent.action.BOOT_COMPLETED.

<!-- Start the Service if applicable on boot --> 
<receiver android:name="com.test.MyReceiver "> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED"/> 
    </intent-filter> 
</receiver> 

Assurez-vous également d'inclure l'autorisation de démarrage complète.

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 

maintenant mettre en œuvre le recepteur

public class MyReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     YourClass.updateMyWidgets();// you may need to make this method static. 
    } 
} 
+0

Ok, pouvez-vous me donner un code court de ce imolementation que tu me dis .. Je suis tryed mais ne fonctionne pas ... – Simpson