2014-04-27 2 views
3

나는 Android 위젯을 만들고 있습니다. 이것은 내 AppWidgetProvider 클래스입니다.Android AppWidgetProvider의 onReceive 메소드가 호출되지 않습니다.

public class MyWidgetProvider extends AppWidgetProvider { 

public static String ACTION_CHARGE = "Charge"; 
public static String ACTION_BALANCE = "Balance"; 
public static String ACTION_SEND_BALANCE = "SendBalance"; 
public static String ACTION_CALL_ME = "CallMe"; 

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

    // Get all ids 
    ComponentName thisWidget = new ComponentName(context, 
      MyWidgetProvider.class); 
    int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); 
    for (int widgetId : allWidgetIds) { 

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

     // Register onClickListeners 
     Intent intent = new Intent(context, MyWidgetProvider.class); 
     intent.setAction(ACTION_CHARGE); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 
       0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     remoteViews.setOnClickPendingIntent(R.id.ib_charge, pendingIntent); 

     intent = new Intent(context, MyWidgetProvider.class); 
     intent.setAction(ACTION_BALANCE); 
     pendingIntent = PendingIntent.getBroadcast(context, 1, intent, 
       PendingIntent.FLAG_UPDATE_CURRENT); 
     remoteViews.setOnClickPendingIntent(R.id.ib_balance, pendingIntent); 

     intent = new Intent(context, MyWidgetProvider.class); 
     intent.setAction(ACTION_SEND_BALANCE); 
     pendingIntent = PendingIntent.getBroadcast(context, 2, intent, 
       PendingIntent.FLAG_UPDATE_CURRENT); 
     remoteViews.setOnClickPendingIntent(R.id.ib_charge_send, 
       pendingIntent); 

     intent = new Intent(context, MyWidgetProvider.class); 
     intent.setAction(ACTION_CALL_ME); 
     pendingIntent = PendingIntent.getBroadcast(context, 3, intent, 
       PendingIntent.FLAG_UPDATE_CURRENT); 
     remoteViews.setOnClickPendingIntent(R.id.ib_call_me, pendingIntent); 

     appWidgetManager.updateAppWidget(widgetId, remoteViews); 
    } 
} 

@Override 
public void onReceive(Context context, Intent intent) { 
    if (intent.getAction().equals(ACTION_CHARGE)) { 
     Log.d("onReceive", ACTION_CHARGE); 
     context.startActivity(new Intent("android.intent.action.CALL", Uri 
       .parse("tel:*789*1415" + Uri.encode("#")))); 
    } else if (intent.getAction().equals(ACTION_BALANCE)) { 
     Log.d("onReceive", ACTION_BALANCE); 
    } else if (intent.getAction().equals(ACTION_SEND_BALANCE)) { 
     Log.d("onReceive", ACTION_SEND_BALANCE); 
    } else if (intent.getAction().equals(ACTION_CALL_ME)) { 
     Log.d("onReceive", ACTION_CALL_ME); 
    } 

    super.onReceive(context, intent); 
    Log.d("onReceive", 
      "***********************************************************************"); 

} 
} 

그러나 onReceive 메서드는 결코 호출되지 않습니다. 문제가 어디 있니?

답변

1

아래에서와 같이 공급자의 구성 활동을 사용하는 경우 활동을 구성 할 때 setOnClickPendingIntent()을 기억하거나 다른 것이 모두 올 바르더라도 onReceive() 메서드는 나중에 호출되지 않습니다.

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
        android:minWidth="40dp" 
        android:minHeight="40dp" 
        android:updatePeriodMillis="86400000" 
        android:previewImage="@drawable/icon" 
        android:initialLayout="@layout/appwidget" 
        android:configure="AppWidgetConfigure" 
        android:resizeMode="horizontal|vertical" 
        android:widgetCategory="home_screen"> 
</appwidget-provider> 
관련 문제