相关疑难解决方法(0)

Android Widget未更新

我正在尝试实现一个简单的小部件,以便在主屏幕上显示.我遇到的问题是onUpdate只在我安装小部件时被调用一次.配置如下.注意:我不会将更新周期留在20秒,因为我知道这会消耗电池(只是测试).

组态:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
   android:minWidth="294dp"
   android:minHeight="72dp"
   android:updatePeriodMillis="20000"
   android:initialLayout="@layout/my_custom_app_widget">`
</appwidget-provider>`
Run Code Online (Sandbox Code Playgroud)

清单摘录:

<receiver android:name="MyCustomWidgetProvider">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
        android:resource="@xml/my_custom_app_widget_info" />
</receiver>
Run Code Online (Sandbox Code Playgroud)

我在安装窗口小部件时会观察到以下行为:在onReceive上的我的WidgetProvider类中调用onEnabled然后onReceive,然后调用onUpdate.

之后,窗口小部件显示,并且永远不会再次调用onUpdate.我还会在调用onUpdate时检查提示器的设置,并且上面用XML设置的所有内容(例如更新周期)都是正确的.

android widget android-appwidget

37
推荐指数
2
解决办法
2万
查看次数

如何动态更新Widget(不等待30分钟才能调用onUpdate)?

我目前正在学习Android中的小部件.

我想创建一个WIFI小部件,它将显示SSID,即RSSI(信号)级别.

但我也希望能够从我正在运行的服务中发送数据,通过wifi计算声音质量.

以下是我阅读和快速教程后的内容:


public class WlanWidget extends AppWidgetProvider{

RemoteViews remoteViews;
AppWidgetManager appWidgetManager;
ComponentName thisWidget;
WifiManager wifiManager;

public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new WlanTimer(context, appWidgetManager), 1, 10000);

}


private class WlanTimer extends TimerTask{

        RemoteViews remoteViews;
        AppWidgetManager appWidgetManager;
        ComponentName thisWidget;


public WlanTimer(Context context, AppWidgetManager appWidgetManager) {

        this.appWidgetManager = appWidgetManager;
        remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
        thisWidget = new ComponentName(context, WlanWidget.class);
        wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);


}

@Override
public void run() {

        remoteViews.setTextViewText(R.id.widget_textview,
        wifiManager.getConnectionInfo().getSSID());
        appWidgetManager.updateAppWidget(thisWidget, remoteViews); …
Run Code Online (Sandbox Code Playgroud)

android widget dynamic

18
推荐指数
1
解决办法
3万
查看次数

小部件案例不适用于Oreo 8.1 - 收到的消息:W/BroadcastQueue:不允许后台执行:接收Intent

我的小部件应用程序在除了8 Oreo之外的所有Android版本上运行良好.我收到一条W/BroadcastQueue: Background execution not allowed: receiving Intent消息.

CommonsWare有一个有趣的博客,但我不完全理解为什么它适用于我的情况. https://commonsware.com/blog/2017/04/11/android-o-implicit-broadcast-ban.html

我的情况看起来非常简单:我有一个带按钮的小部件,我想在单击时更改文本按钮.

解决此问题的正确方法是什么?

TestWidget.java

public class TestWidget extends AppWidgetProvider {
    private static RemoteViews views;
    private static boolean buttonClicked = false;
    public static final String ACTION_AUTO_UPDATE = "AUTO_UPDATE";

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

        if(intent.getAction().equals(ACTION_AUTO_UPDATE))
        {
                Log.i("TESTWID", "get onReceive");
        }
    }

    static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
                                int appWidgetId) {
        views = new RemoteViews(context.getPackageName(), R.layout.test_widget);
        views.setOnClickPendingIntent(R.id.wid_btn_tst, setButton(context));

        appWidgetManager.updateAppWidget(appWidgetId, views);
    }

    @Override
    public void onUpdate(Context context, AppWidgetManager …
Run Code Online (Sandbox Code Playgroud)

android android-widget

8
推荐指数
1
解决办法
2199
查看次数

在screen_on上更新android小部件的最佳方法是什么.是否支持Android Oreo(API 26)

我创建了一个非常好的小部件,然后由于Google Play Developer Console的要求,我将targetSDK从23更改为26.

切换到Android SDK 26后,我的app小部件不再更新screen_on/User_present事件.我可以看到,由于(后台执行限制),后续运行任务在Android 26中有很多变化.

以下是我的问题?

Q1-如何在每个screen_on事件上更新我的app小部件,以便用户在小部件上看到正确的状态?

Q2-如何每隔1小时定期更新我的应用小部件?

以下代码我正在使用.

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

        RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.app_widget);
        String token = getToken();
        getUUID();
        getGatewayActivationStatus();
        getEnvironment();
        if (token != null) {
            remoteViews.setViewVisibility(R.id.layoutBtn, View.VISIBLE);
            AppWidgetIntentReceiver appWI = new AppWidgetIntentReceiver();
            appWI.getMode(context);
        } else {
            remoteViews.setTextViewText(R.id.txt_mode, "Please sign into your App to see status.");
            remoteViews.setViewVisibility(R.id.layoutBtn, View.INVISIBLE);
        }

        remoteViews.setOnClickPendingIntent(R.id.btn_refresh, buildButtonPendingIntent(context, _refresh));
        remoteViews.setOnClickPendingIntent(R.id.txt_mode, buildButtonPendingIntent(context, _openApp));

        appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
    }


    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) …
Run Code Online (Sandbox Code Playgroud)

java android android-widget cordova ionic-framework

6
推荐指数
1
解决办法
684
查看次数