2015-12-08 69 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返回 「ACTION: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

看來,Stack Exchange上的[this](http://stackoverflow.com/questions/3320115/android-onclicklistener-identify-button)帖子可以回答你的問題,也許在那裏檢查? – 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>