2015-12-08 22 views
1

Я пытаюсь создать виджет главного экрана, который будет включать и выключать gps (местоположение в настройках). Я до сих пор не понимаю, как обрабатывать событие нажатия кнопки.Обработка щелчка кнопки в главном экране виджета

Я взял этот код из учебника онлайн.

public class LocationWidget extends AppWidgetProvider { 
private static String SYNC_CLICKED = "automaticWidgetSyncButtonClick"; 

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    final int count = appWidgetIds.length; 
    String status; 
    LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 

    for (int i = 0; i < count; i++) { 
     int widgetId = appWidgetIds[i]; 
     if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
      status = "OFF"; 
     } else { 
      status = "ON"; 
     } 
     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.activity_main); 
     remoteViews.setTextViewText(R.id.textView, status); 

     Intent intent = new Intent(context, LocationWidget.class); 
     intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 
     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     remoteViews.setOnClickPendingIntent(R.id.actionButton, pendingIntent); 
     appWidgetManager.updateAppWidget(widgetId, remoteViews); 
    } 
} 

public void onReceive(Context context, Intent intent) { 
    super.onReceive(context, intent); 
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.activity_main); 
    remoteViews.setTextViewText(R.id.textView, "Button clicked"); 
    Log.v("ACTION", intent.getAction()); 
} 

}

Внутри OnReceive, Log.v возвращает "ДЕЙСТВИЕ: android.appwidget.action.APPWIDGET_UPDATE". Поэтому мне нужна помощь, чтобы заставить кнопку вести себя так, как я хочу, когда ее нажимают. Может кто-нибудь объяснить, как и почему?

ответ

0

Я получил его.

public class LocationWidget extends AppWidgetProvider { 
    public static String WIDGET_BUTTON = "MY_PACKAGE_NAME.WIDGET_BUTTON"; 

    private static final String ACTION_CLICK = "ACTION_CLICK"; 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     final int count = appWidgetIds.length; 
     String status; 
     LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 

     for (int i = 0; i < count; i++) { 
      int widgetId = appWidgetIds[i]; 
      if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
       status = "OFF"; 
      } else { 
       status = "ON"; 
      } 
      RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.activity_main); 


      if (status == "ON") { 
       remoteViews.setInt(R.id.actionButton, "setBackgroundColor", Color.GREEN); 
       remoteViews.setTextViewText(R.id.actionButton, "Location Service On"); 
      } 
      if (status == "OFF") { 
       remoteViews.setInt(R.id.actionButton, "setBackgroundColor", Color.RED); 
       remoteViews.setTextViewText(R.id.actionButton, "Location Service Off"); 
      } 
      Intent intent = new Intent(context, LocationWidget.class); 
      intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 
      intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds); 

      String buttonclick = "buttonclick"; 

      PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
      remoteViews.setOnClickPendingIntent(R.id.actionButton, getPendingSelfIntent(context, buttonclick)); 

      appWidgetManager.updateAppWidget(widgetId, remoteViews); 
     } 
    } 

    protected PendingIntent getPendingSelfIntent(Context context, String action) { 
     Intent intent = new Intent(context, LocationWidget.class); 
     intent.setAction(action); 
     return PendingIntent.getBroadcast(context, 0, intent, 0); 
    } 

    public void onReceive(Context context, Intent intent) { 
     super.onReceive(context, intent); 
     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.activity_main); 


     if (intent.getAction() == "buttonclick") { 
      Log.v("ACTION", "buttonclick"); 

      Intent callGPSSettingIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
      callGPSSettingIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(callGPSSettingIntent); 


     } 


    } 




} 
-1

Вы должны быть в состоянии сделать

if(intent.getAction() == <action_type>) { /*Handling code here*/ }

+0

Но какое действие должно возвращать нажатие кнопки конкретно и почему? – Gobtron

+0

Кажется, что сообщение [this] (http://stackoverflow.com/questions/3320115/android-onclicklistener-identify-a-button) на Stack Exchange могло ответить на ваш вопрос, может быть, проверить там? – liquidsystem

0

я открою heplactivity вы можете изменить и добавить свои настройки намерения

appwidget.java

public class MyWidget extends AppWidgetProvider { 
     Button btnhelp; 

     @Override 
     public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 

      RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
      Intent configIntent = new Intent(context, HelpActivity.class); 
      PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0); 
      remoteViews.setOnClickPendingIntent(R.id.btnhelp, configPendingIntent); 
      appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); 
     } 
    } 

манифеста

<receiver android:name=".MyWidget"> 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.appwidget.provider" 
      android:resource="@xml/widget_info" /> 
    </receiver> 

ресурс XML

<?xml version="1.0" encoding="utf-8"?> 
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:initialLayout="@layout/widget_layout" 
    android:minHeight="70dp" 
    android:minWidth="70dp" 
    android:updatePeriodMillis="300000"></appwidget-provider> 

расположение XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_margin="8dip" 
    android:background="@drawable/ic_dashboard_help" 
    android:clickable="true"> 

    <Button 
     android:id="@+id/btnhelp" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="center" 
     android:layout_margin="4dip" 
     android:background="@android:color/transparent" /> 

</LinearLayout>