Как запустить активность после нажатия кнопки виджета?

После этого урока я быстро создал простой виджет, который отображает текущее время на главном экране:

Введите описание изображения здесь

Я изменил код, так что виджет также поставляется с кнопкой. Моя цель – запустить действие, как только нажата кнопка. К сожалению, я не совсем понимаю, где прослушать нажатие кнопки. Должно ли это отправляться в секцию широковещательного приемника файла манифеста?

<!-- Broadcast Receiver --> <receiver android:name=".WifiSSIDWidget" android:label="@string/app_name"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/wifi_ssid_widget_provider" /> </receiver> 

Или код скорее переходит в onUpdate ? Вот код класса виджета:

 public class HelloWidget extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { Timer timer = new Timer(); timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager), 1, 1000); } private class MyTime extends TimerTask { RemoteViews remoteViews; AppWidgetManager appWidgetManager; ComponentName thisWidget; DateFormat format = SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM, Locale.getDefault()); public MyTime(Context context, AppWidgetManager appWidgetManager) { this.appWidgetManager = appWidgetManager; remoteViews = new RemoteViews(context.getPackageName(), R.layout.main); thisWidget = new ComponentName(context, HelloWidget.class); } @Override public void run() { remoteViews.setTextViewText(R.id.widget_textview, "TIME = " +format.format(new Date())); appWidgetManager.updateAppWidget(thisWidget, remoteViews); } } } 

Вот код, который я хочу вызвать после нажатия кнопки:

 public void openWifiSettings() { final Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.addCategory(Intent.CATEGORY_LAUNCHER); final ComponentName cn = new ComponentName("com.android.settings", "com.android.settings.wifi.WifiSettings"); intent.setComponent(cn); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } 

 import android.app.PendingIntent; ... public static final String ACTION_BUTTON1_CLICKED = "com.example.myapp.BUTTON1_CLICKED"; 

В onUpdate добавьте следующее к вашей кнопке:

 Intent intent = new Intent(ACTION_BUTTON1_CLICKED); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); remoteViews.setOnClickPendingIntent(R.id.button_1, pendingIntent); 

И в onReceive вашего AppWidget

 @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "onReceive() " + intent.getAction()); super.onReceive(context, intent); ... if (ACTION_BUTTON1_CLICKED.equals(intent.getAction())) { // your code } 

Также добавьте свое намерение к манифесту

 <intent-filter> <action android:name="com.example.myapp.BUTTON1_CLICKED" /> .... 
Intereting Posts