应用程序进程终止后无法点击Android小部件

时间:2016-07-31 20:41:01

标签: android widget receiver

我用两个按钮编写了一个Android小部件。如果我开始"活动"一切正常,我可以点击这些按钮。但如果我锁定手机,过程会在几秒钟后死亡

  

enter image description here

我尝试再次点击这些按钮,没有发生,LOGCAT除外:

  

I/ActivityManager: filter receiver for action = ButtonRefresh


updateAppWidget,通过@Override onUpdate(...)调用:

private final static String BUTTON_REFRESH = "ButtonRefresh";

public static void updateAppWidget(final Context context, final AppWidgetManager appWidgetManager,
                                   final int appWidgetId) {

    final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.myclasslayout);

    //Click listener depending on @this (getPendingSelfIntent)
    views.setOnClickPendingIntent(R.id.button_refresh, getPendingSelfIntent(context, BUTTON_REFRESH));

    [...]

    appWidgetManager.updateAppWidget(appWidgetId, views);
}


getPendingSelfIntent()

private static PendingIntent getPendingSelfIntent(Context context, String action) {
    Intent intent = new Intent(context, MyClass.class);
    intent.setAction(action);
    return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}


onReceive()

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

    if (BUTTON_REFRESH.equals(intent.getAction())) {
        Log.i("MyLogtag", "Refresh"); //This never shows up in LOGCAT
    }
}


AndroidManifest.xml

[...]
<receiver android:name=".MyClass">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data
        android:name="android.appwidget.provider"
        android:resource="@xml/myclass_info" />
</receiver>
[...]
当应用进程为dead时,

onReceive 从不被调用...

1 个答案:

答案 0 :(得分:0)

我明白了......

我必须改变

private final static String BUTTON_REFRESH = "ButtonRefresh";

private final static String BUTTON_REFRESH = "com.example.mypackage.BUTTON_REFRESH";

AndroidManifest

 <receiver android:name=".MyClass">
<intent-filter>
    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    <action android:name="com.example.mypackage.BUTTON_REFRESH"/>
</intent-filter>
<meta-data
    android:name="android.appwidget.provider"
    android:resource="@xml/myclass_info" />
</receiver>