这个问题看起来很简单。
Android小部件运行良好,一切正常。
我只想在用户打开设备屏幕时(在正确的时刻)更新小部件内容。
我在互联网和文档中找不到任何提示。这意味着我显然忽略了某些易于理解但重要的东西。
更新:
感谢Murtaza的答案,看起来很完美,但由于某种原因它并没有起作用。我的小部件已经有一个接收器,所以我添加了建议的意图过滤器。
在小部件类中,我覆盖了建议的函数:
Android小部件运行良好,一切正常。
我只想在用户打开设备屏幕时(在正确的时刻)更新小部件内容。
我在互联网和文档中找不到任何提示。这意味着我显然忽略了某些易于理解但重要的东西。
更新:
感谢Murtaza的答案,看起来很完美,但由于某种原因它并没有起作用。我的小部件已经有一个接收器,所以我添加了建议的意图过滤器。
<receiver android:name=".MyWidget" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.intent.action.SCREEN_ON" />
<action android:name="android.intent.action.SCREEN_OFF" />
</intent-filter>
在小部件类中,我覆盖了建议的函数:
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
playNotification(context);
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
playNotification(context);
}
}
playNotification()会播放一个警报。它在小部件内正常工作。但是当我打开和关闭屏幕时,什么都不发生。
第二次更新 - Android中的工作小部件
我发布了整个小部件的代码供需要的人使用。
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.widget.RemoteViews;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.Calendar;
/**
* Implementation of App Widget functionality.
*/
public class MyWidget extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
// There may be multiple widgets active, so update all of them
final int N = appWidgetIds.length;
for (int i = 0; i < N; i++) {
updateAppWidget(context, appWidgetManager, appWidgetIds[i]);
}
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
playNotification(context, true);
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
playNotification(context, true);
}
}
static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
int appWidgetId) {
String widgetText = "";
playNotification(context, true);
widgetText += " DATE:" + Calendar.getInstance().getTime().getHours() + ":" + Calendar.getInstance().getTime().getMinutes();
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.mywidget);
views.setTextViewText(R.id.appwidget_text, widgetText);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
public static void playNotification(Context context, boolean alarm) {
try {
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
if (alarm) notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
Ringtone r = RingtoneManager.getRingtone(context, notification);
if (!r.isPlaying())
r.play();
} catch (Exception e) {
e.printStackTrace();
}
}
ANDROID清单文件
以下是在Android上创建工作小部件所需添加到清单文件的内容。此外,我想要使其工作的筛选器。
<receiver android:name=".MYWidget" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.intent.action.SCREEN_ON" />
<action android:name="android.intent.action.SCREEN_OFF" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/mywidget_info" />
</receiver>
请注意,代码是可行的。除了我问题所涉及的部分之外:"当屏幕开启时更新Android小部件"