Я пытаюсь сделать что-то, что действительно должно быть довольно легким, но это сводит меня с ума. Я пытаюсь запустить действие при нажатии виджета на главном экране, например, действие по настройке виджета. Я думаю, что дословно следовал учебнику на веб-сайте разработчиков Android, и даже нескольким неофициальным учебникам, но я, должно быть, упускаю что-то важное, поскольку оно не работает.
Вот код:
public class VolumeChangerWidget extends AppWidgetProvider {
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){
final int N = appWidgetIds.length;
for (int i=0; i < N; i++) {
int appWidgetId = appWidgetIds[i];
Log.d("Steve", "Running for appWidgetId " + appWidgetId);
Toast.makeText(context, "Hello from onUpdate", Toast.LENGTH_SHORT);
Log.d("Steve", "After the toast line");
Intent intent = new Intent(context, WidgetTest.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
views.setOnClickPendingIntent(R.id.button, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
}
При добавлении виджета на домашний экран Logcat показывает две строки отладки, но не Toast. (Есть идеи, почему бы и нет?) Однако, более неприятно то, что когда я затем нажимаю на кнопку с PendingIntent, связанной с ним, ничего не происходит вообще. Я знаю, что действие "WidgetTest" может выполняться, потому что, если я настраиваю Intent из основного действия, оно запускается нормально.
Если это имеет значение, вот файл манифеста Android:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.steve"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Volume_Change_Program"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".WidgetTest"
android:label="@string/hello">
<intent_filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent_filter>
</activity>
<receiver android:name=".VolumeChangerWidget" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/volume_changer_info" />
</receiver>
</application>
<uses-sdk android:minSdkVersion="3" />
Есть ли способ проверить, где находится неисправность? То есть ошибка в том, что кнопка не связана должным образом с PendingIntent или PendingIntent или Intent не находит WidgetTest.class и т. д.?
Большое спасибо за вашу помощь!
Steve