我構建了一個應用程序,可將小部件添加到主屏幕。該小工具正在與我的Nexus 6P和摩托羅拉Moto G3一起工作。使用三星手機(經過S3 mini(4.1.2),S5,S6(6.0.1)測試),根本沒有添加Widget或者TouchWiz崩潰。Android - 三星:創建配置活動失敗的小工具
有了另一個啓動器(Nova),小部件也不會在S3 mini上創建。
在logcat中我根本沒有看到任何錯誤消息。
我試圖儘可能縮小問題範圍。 如果我從counter_widget_info.xml中刪除android:configure="de.cliff.strichliste.widgets.WidgetConfigurationActivity"
,則會創建窗口小部件。如果我想使用配置活動,TouchWiz會在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>
在AndroidManifest.xml我註冊了以下行的小部件:
<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>
在Java方面,我有在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以某種方式保留了從未實際進入主屏幕的小部件的引用,並開始爲它們播放更新。我剛剛注意到,因爲我用一個預先存在的小部件項目運行測試,這個小部件項目更新頻率較高,並且每次都顯示一個「Toast」。您可能希望在您測試的任何設備上完成卸載,以便在繼續測試之前將其清除。 –