J'ai construit une application avec la possibilité d'ajouter des widgets à l'écran d'accueil. Le widget fonctionne avec mon Nexus 6P et un Motorola Moto G3.Android - Samsung: Création de Widget avec l'activité de configuration échoue
Avec les téléphones Samsung (testé avec S3 mini (4.1.2), S5, S6 (6.0.1)) le widget n'est pas ajouté du tout ou les plantages de TouchWiz.
Avec un autre lanceur (Nova), le widget n'est pas non plus créé sur le S3 mini.
Dans logcat, je ne vois aucun message d'erreur.
J'ai essayé de réduire le problème autant que possible. Le widget est créé si je supprime le android:configure="de.cliff.strichliste.widgets.WidgetConfigurationActivity"
du fichier counter_widget_info.xml. Si je veux utiliser une activité de configuration TouchWiz se bloque sur le Samsung S3 mini.
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="40dp"
android:minHeight="40dp"
android:configure="de.cliff.strichliste.widgets.WidgetConfigurationActivity"
android:updatePeriodMillis="1800000"
android:initialLayout="@layout/widget_counter"
android:resizeMode="horizontal|vertical"
android:widgetCategory="home_screen"
android:previewImage="@drawable/widget_preview">
</appwidget-provider>
Dans le AndroidManifest.xml je me inscrire le widget avec les lignes suivantes:
<receiver
android:name=".widgets.CounterWidgetProvider">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/counter_widget_info" />
</receiver>
Du côté Java, j'ai ce qui suit dans le WidgetConfigurationActivity:
public class WidgetConfigurationActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WidgetConfigurationBinding binding = DataBindingUtil.setContentView(this, R.layout.widget_configuration);
setResult(RESULT_OK);
}
}
Et ceci dans la classe WidgetProvider:
public class CounterWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
Intent intent = new Intent(context, CounterWidgetProvider.class);
context.startService(intent);
}
}
Juste une tête: j'ai remarqué un comportement étrange, je crois des tests que je courais qui a provoqué la plante TouchWiz. Après le redémarrage, il semble que TouchWiz soit resté en quelque sorte sur des références pour des widgets qui ne sont jamais parvenus à l'écran d'accueil, et a commencé à diffuser des mises à jour pour eux. Je viens juste de le remarquer parce que j'ai fait des tests avec un projet de widget préexistant qui se met à jour assez fréquemment, et montre un toast à chaque fois. Vous voudrez peut-être effectuer une désinstallation complète sur tous les appareils sur lesquels vous avez effectué le test, afin de le supprimer, avant de poursuivre les tests. –