2016-11-24 27 views
6
public class VWid extends AppWidgetProvider { 

    public static String WIDGET_UPDATE = "WIDGET_UPDATE"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     super.onReceive(context, intent); 

     if (WIDGET_UPDATE.equals(intent.getAction())) { 
      Toast.makeText(context, "onReceiver()", Toast.LENGTH_LONG).show(); 
     } 
    } 

    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     final int N = appWidgetIds.length; 

     // Perform this loop procedure for each App Widget that belongs to this 
     // provider 
     for (int i = 0; i < N; i++) { 
      int appWidgetId = appWidgetIds[i]; 
      int k, p; 
      SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy hh:mm a"); 

      AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
      int k = audioManager.getStreamVolume(AudioManager.STREAM_SYSTEM); 
      Toast.makeText(getActivity(), k+"", Toast.LENGTH_LONG).show(); 

      Intent imageview2Intent= new Intent(context, VWid.class); 
      PendingIntent pendingIntent2= PendingIntent.getBroadcast(context,0, imageview2Intent,0); 

      views.setOnClickPendingIntent(R.id.imagebuttonrefresh, pendingIntent2); // 

      views.setTextViewText(R.id.textview1, "Last Refresh: " + dateFormat.format(new Date()).toString()); 

      pushWidgetUpdate(context, views); 
     } 
    } 

    public static void pushWidgetUpdate(Context context, RemoteViews remoteViews) { 
     ComponentName myWidget = new ComponentName(context, VWid.class); 
     AppWidgetManager manager = AppWidgetManager.getInstance(context); 
     manager.updateAppWidget(myWidget, remoteViews); 
     Log.d("UPDATED", "testing"); 
    } 
} 

içinden onUpdate` `aramak için. Ayrıca sistem hacmini bir Tostta gösterir.elle nasıl Widget kendisi

Sistem hacmini artırdığım/azalttığımı varsayalım, onUpdate() işlevini yenilemeyi başlattığımda, güncel Tost'u görüntülemeyi ve textview1 metnini yeni verilere ve süreye güncellemeye çalışmalıyım ama bu gerçekleşmiyor.

Özünde onUpdate() işlevini çağıran bir yenilemeyi elde edebilmek için kodu nasıl değiştirebilirim.

cevap

3

bu deneyin:

public class WidgetProvider extends AppWidgetProvider { 

public static final String REFRESH_ACTION = "com.packagename.REFRESH_ACTION"; 

@Override 
    public void onReceive(Context context, Intent intent) { 
     super.onReceive(context, intent); 

    if (intent.getAction().equals(WidgetProvider.REFRESH_ACTION)) { 
     Bundle extras = intent.getExtras(); 
     if (extras != null) { 
      int[] appWidgetIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS); 

      if (appWidgetIds != null && appWidgetIds.length > 0) { 
       Toast.makeText(context, "REFRESH", Toast.LENGTH_SHORT).show(); 
       this.onUpdate(context, AppWidgetManager.getInstance(context), appWidgetIds); 
      } 
     } 
    } 

} 


@Override 
public void onUpdate(final Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    final int N = appWidgetIds.length; 


    for (int i = 0; i < N; ++i) { 

     RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 

     Intent intentServiceCall = new Intent(context, WidgetService.class); 
     intentServiceCall.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]); 

    //Refresh 
     Intent refreshIntent = new Intent(context, WidgetProvider.class); 
     refreshIntent.setAction(WidgetProvider.REFRESH_ACTION); 
     refreshIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds); 
     intentServiceCall.setData(Uri.parse(intentServiceCall.toUri(Intent.URI_INTENT_SCHEME))); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, refreshIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
     rv.setOnClickPendingIntent(R.id.ivRefreshWidget, pendingIntent); 

    appWidgetManager.updateAppWidget(appWidgetIds[i], rv); 
    } 
    super.onUpdate(context, appWidgetManager, appWidgetIds); 
} 
+0

Bu, yaptığım işe benzer. Teşekkür ederim. Cevap için +1. – Si8

1

Değişim bu bölümü:

Intent imageview2Intent= new Intent(context, VWid.class); 
imageview2Intent.setAction(WIDGET_UPDATE); 
PendingIntent pendingIntent2= PendingIntent.getBroadcast(context,0, imageview2Intent,0); 
views.setOnClickPendingIntent(R.id.imagebuttonrefresh, pendingIntent2); // 


@Override 
public void onReceive(Context context, Intent intent) { 
    super.onReceive(context, intent); 

    if (WIDGET_UPDATE.equals(intent.getAction())) { 
     pushWidgetUpdate(context); 
    } 
} 
+0

Ben AppWidgetProvider ve düğme tıklama işlemek için bir BroadcastReceiver var. Bunu nereye eklerim? Ayrıca düğme, widget'ın kendisinde bir görüntü düğmesidir. – Si8