2017-02-19 4 views
0

Ich habe ein Widget, das aus zwei Schaltflächen und ein Bild besteht. Ich möchte es so machen, dass die Tasten für 30 Sekunden deaktiviert werden, wenn der Benutzer einen drückt. Wie kann dieser Effekt erreicht werden? Das ist mein Layout:vorübergehend deaktivieren Android Widget-Taste

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="@dimen/widget_margin" 
    android:background="#55000000"> 

    <ImageView 
     android:id="@+id/imageView" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:src="@drawable/bulb"/> 

    <Button 
     android:id="@+id/onButton" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:text="On" 
     android:background="@drawable/appwidget_dark_bg_clickable" 
     /> 

    <Button 
     android:id="@+id/offButton" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:text="Off" 
     android:background="@drawable/appwidget_dark_bg_clickable"/> 

</LinearLayout> 

Dies ist mein aktueller Controller:

public class WidgetProvider extends AppWidgetProvider { 
    public static String ACTION_WIDGET_ON = "Lights turning on"; 
    public static String ACTION_WIDGET_OFF = "Lights turning off"; 
    private String serverUrl = //put your server URL here 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 

     Intent active = new Intent(context, WidgetProvider.class); 
     active.setAction(ACTION_WIDGET_ON); 
     PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0); 
     remoteViews.setOnClickPendingIntent(R.id.onButton, actionPendingIntent); 

     active = new Intent(context, WidgetProvider.class); 
     active.setAction(ACTION_WIDGET_OFF); 
     actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0); 
     remoteViews.setOnClickPendingIntent(R.id.offButton, actionPendingIntent); 

     appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(ACTION_WIDGET_ON)) { 
      Log.i("onReceive", ACTION_WIDGET_ON); 
      new RestPostUtil().execute(serverUrl + "/lightsOn"); 
     } else if (intent.getAction().equals(ACTION_WIDGET_OFF)) { 
      Log.i("onReceive", ACTION_WIDGET_OFF); 
      new RestPostUtil().execute(serverUrl + "/lightsOff"); 
     } else { 
      super.onReceive(context, intent); 
     } 
    } 

} 

Antwort

0

Versuchen import static java.lang.Thread.sleep;

und dann

try { 
sleep(3000); 
} catch (InterruptedException e) { 
e.printStackTrace(); 
} 
0

Sie ein Timer und runOnUiThread müssen verwenden, um verhindern, anr einfach zu setzen die TimeImMS und Sie sind gut zu gehen (ex 1000 = 1s)

button.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    button.setEnabled(false); 

    Timer buttonTimer = new Timer(); 
    buttonTimer.schedule(new TimerTask() { 

     @Override 
     public void run() { 
      runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        button.setEnabled(true); 
       } 
      }); 
     } 
    }, TimeInMS); 
} 
}); 
Verwandte Themen