ウィジェットをホーム画面に追加する機能を備えたアプリケーションを作成しました。このウィジェットは、Nexus 6PとMotorola Moto G3で動作しています。Android - Samsung:設定作業でウィジェットを作成できない
サムスンの携帯電話(S3 mini(4.1.2)、S5、S6(6.0.1)でテスト済み)では、ウィジェットは全く追加されず、TouchWizがクラッシュします。
別のランチャー(Nova)では、ウィジェットはS3 mini上に作成されません。
logcatでは、エラーメッセージは一切表示されません。
できるだけ問題を絞り込もうとしました。 counter_widget_info.xmlからandroid:configure="de.cliff.strichliste.widgets.WidgetConfigurationActivity"
を削除すると、ウィジェットが作成されます。構成アクティビティを使用したい場合、TouchWizはSamsung S3 miniでクラッシュします。私は次の行にウィジェットを登録したAndroidManifest.xmlで
<?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>
:Java側で
<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>
、私は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);
}
}
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);
}
}
私は、私がTouchWizのクラッシュを引き起こしたテストからだと信じているいくつかの奇妙な行動に気づいた。再起動後、TouchWizは実際に決してホーム画面に行ったことのないウィジェットの参照に何らかの形で保持していて、それらの更新をブロードキャストし始めたようだ。私はちょうどそれ自体を更新する既存のウィジェットプロジェクトでテストを実行し、毎回「トースト」を表示するので気付いたことがあります。テストを続行する前に、テストしたすべてのデバイスで完全なアンインストールを実行して、それをクリアしたい場合があります。 –