2012-04-09 34 views
8

tôi đã phát triển một widget android có nút mutiple trên đó. nó hoạt động tốt và tôi thêm lần đầu tiên. nhưng khi tôi khởi động lại các nút thiết bị không kích hoạt. ở đây nó là những gì tôi làmwidget android với nhiều nút

đây là xml cấu hình

<receiver android:name="com.islem.widget.MyWidgetMain" android:label="@string/app_name"> 
<intent-filter> 
    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
    <!-- Broadcast Receiver that will also process our self created action --> 
    <action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RECEIVER1"/> 
    <action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RECEIVER2"/> 
    <action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RECEIVER3"/> 
    <action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RECEIVER4"/> 
    <action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RECEIVER5"/> 
    <action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RECEIVER6"/> 
    <action android:name="com.islem.widget.KalanWidgetMain.ACTION_WIDGET_RELOAD_ALARM"/> 

</intent-filter> 
<meta-data android:name="android.appwidget.provider" android:resource="@xml/k_widget_provider" /> 

ở đây là phương pháp onUpdate

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

    for (int appWidgetId : appWidgetIds) { 

     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.kalan_widget_main); 

     Intent refreshButtonIntent = new Intent(context, KalanWidgetMain.class); 
     refreshButtonIntent.setAction(ACTION_WIDGET_RECEIVER1); 

     Intent voiceTabIntent = new Intent(context, KalanWidgetMain.class); 
     voiceTabIntent.setAction(ACTION_WIDGET_RECEIVER2); 

     Intent dataTabIntent = new Intent(context, KalanWidgetMain.class); 
     dataTabIntent.setAction(ACTION_WIDGET_RECEIVER3); 

     Intent smsTabIntent = new Intent(context, KalanWidgetMain.class); 
     smsTabIntent.setAction(ACTION_WIDGET_RECEIVER4); 

     Intent prevButtonIntent = new Intent(context, KalanWidgetMain.class); 
     prevButtonIntent.setAction(ACTION_WIDGET_RECEIVER5); 

     Intent nextButtonIntent = new Intent(context, KalanWidgetMain.class); 
     nextButtonIntent.setAction(ACTION_WIDGET_RECEIVER6); 

     refreshButtonIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
     voiceTabIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
     dataTabIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
     smsTabIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
     prevButtonIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
     nextButtonIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 

     PendingIntent refreshButtonPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, refreshButtonIntent, PendingIntent.FLAG_CANCEL_CURRENT); 
     PendingIntent voiceTabPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, voiceTabIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
     PendingIntent dataTabPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, dataTabIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
     PendingIntent smsTabPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, smsTabIntent, PendingIntent.FLAG_CANCEL_CURRENT); 
     PendingIntent prevButtonPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, prevButtonIntent, 0); 
     PendingIntent nextButtonPendingIntent = PendingIntent.getBroadcast(context, appWidgetId, nextButtonIntent, 0); 

     remoteViews.setOnClickPendingIntent(R.id.kalanRefresh, refreshButtonPendingIntent); 
     remoteViews.setOnClickPendingIntent(R.id.kalanTabVoiceBg, voiceTabPendingIntent); 
     remoteViews.setOnClickPendingIntent(R.id.kalanTabDataBg, dataTabPendingIntent); 
     remoteViews.setOnClickPendingIntent(R.id.kalanTabSMSBg, smsTabPendingIntent); 
     remoteViews.setOnClickPendingIntent(R.id.kalanPrev, prevButtonPendingIntent); 
     remoteViews.setOnClickPendingIntent(R.id.kalanNext, nextButtonPendingIntent); 
     appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); 

     KalanUpdater.registerWidget(context, appWidgetManager, appWidgetId); 
     appWidgetManager.updateAppWidget(appWidgetId, remoteViews); 
    } 
} 

ở đây là phương pháp onReceive

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

    System.out.println("on onReceive");  
    Toast.makeText(context, "onReceive", Toast.LENGTH_SHORT).show(); 

    // v1.5 fix that doesn't call onDelete Action 
    final String action = intent.getAction(); 
    if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) { 
     final int appWidgetId = intent.getExtras().getInt(
       AppWidgetManager.EXTRA_APPWIDGET_ID, 
       AppWidgetManager.INVALID_APPWIDGET_ID); 
     if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) { 
      this.onDeleted(context, new int[] { appWidgetId }); 
     } 
    } else { 

     if (intent.getAction().equals(ACTION_WIDGET_RECEIVER1) || intent.getAction().equals(ACTION_WIDGET_RECEIVER2) || 
       intent.getAction().equals(ACTION_WIDGET_RECEIVER3) || intent.getAction().equals(ACTION_WIDGET_RECEIVER4) || 
       intent.getAction().equals(ACTION_WIDGET_RECEIVER5) || intent.getAction().equals(ACTION_WIDGET_RECEIVER6) || 
       intent.getAction().equals(ACTION_WIDGET_RELOAD_ALARM) 
       ) {    
      int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); 
      System.out.println("appWidgetId:" + appWidgetId + ", action:" + action); 




     } 


     super.onReceive(context, intent); 
    } 
} 

Trả lời

0

Khi điện thoại lại bắt đầu, nó sẽ gọi onEnable thay vì onUpdate.

--UPDATE--

int[] allids = AppWidgetManager 
.getInstance(Context) 
.getAppWidgetIds(new ComponentName(Context, YourAppWidgetProvider.class); 

này sẽ nhận được tất cả id đó là thuộc thẩm quyền của YourAppWigetProvider. Đọc thêm trên this

+0

tôi đã chuyển nội dung của cập nhật thành một phương thức và gọi từ onEnabled và onUpdate như dưới đây nhưng không hoạt động. và tôi cũng có thể xem nhật ký onUpdate khi khởi động lại. \t @ Override \t public void onEnabled (Context context) { \t \t // TODO Auto-tạo ra phương pháp sơ khai \t \t super.onEnabled (context); \t \t Toast.makeText (context, "onEnabled", Toast.LENGTH_SHORT) .show(); \t \t \t \t \t \t int [] appWidgetIds = AppWidgetManager.getInstance (context) .getAppWidgetIds (mới ComponentName (bối cảnh, KalanWidgetMain.class)); \t \t startWidget (ngữ cảnh, AppWidgetManager.getInstance (ngữ cảnh), appWidgetIds); \t} – ysnky

+0

không xóa khỏi onUpdate chỉ cần sao chép trong onEnabled –

Các vấn đề liên quan