相关疑难解决方法(0)

应用程序升级后,某些第三方小部件会停止更新

我的应用程序托管用户安装的小部件,与启动器应用程序相同.

一旦我绑定小部件,一切正常.窗口小部件创建,自动更新,我可以单击以导航内部视图.

一切都工作正常,直到我从Play商店更新我的应用程序(或手动使用签名的APK).

更新后,小部件仍然显示但不再更新.一些小部件在我点击它们时起作用,但是视图被卡住并且永远不会更新,直到我重新创建小部件(获取新ID并绑定它).

我尝试使用强制更新

Intent intent = new Intent();
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent.setComponent(appWidgetInfo.provider);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[]
                {appWidgetId});
context.sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)

但这没有帮助......

我想尝试点击强制更新,但我找不到任何方法来获取小部件的RemoteViews(因为这不是我的小部件,我只是托管它).

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

Intent updateIntent = new Intent();
updateIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
updateIntent.putExtra(myWidgetProvider.WIDGET_IDS_KEY, ids);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
      context, 0, updateIntent, PendingIntent.FLAG_UPDATE_CURRENT);

views.setOnClickPendingIntent(R.id.view_container, pendingIntent);
Run Code Online (Sandbox Code Playgroud)

还实现了一个AppWidgetProvider监听小部件的ID更改(APPWIDGET_HOST_RESTORED),但它不会在我的应用程序更新时调用.

我的下一步是在应用程序更新后重新创建所有小部件,但我真的不愿意这样做.

非常感谢任何帮助!

android android-widget android-appwidget

9
推荐指数
1
解决办法
326
查看次数

如何测试我的小部件的onUpdate方法不等待30分钟

学习小部件3天后,我终于了解了setOnClickPendingIntent,RemoteViews ......我已经完成了我的小部件.它已经在很多教程的帮助下完成了.但现在我想测试它是否有效.在我读到的时候,最低更新率是30分钟.另一种方法是使用AlarmManager.但是我找不到AlarmManager的任何例子.等了30分钟后,什么也没发生.我改变了一些东西,还在等待,它改变了......

有没有办法更快地测试它?

 <?xml version="1.0" encoding="utf-8" ?>
    <appwidget-provider
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="65dip"
    android:minHeight="30dip"

    android:updatePeriodMillis="180000"
    android:initialLayout="@layout/main" />
Run Code Online (Sandbox Code Playgroud)

CountWidget

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;

public class CountWidget extends AppWidgetProvider {
    private static final int[] IMAGES = { R.drawable.die_1, R.drawable.die_2,
            R.drawable.die_3, R.drawable.die_4, R.drawable.die_5,
            R.drawable.die_6 };
    public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget";
    public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        ComponentName me = new ComponentName(context, CountWidget.class);

        appWidgetManager
                .updateAppWidget(me, buildUpdate(context, …
Run Code Online (Sandbox Code Playgroud)

android widget onupdate

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

活动中的AppWidgetManager.getAppWidgetIds返回一个空列表

我有一个appwidget,我正试图从一个活动更新.

为此,我需要appwidget id.

我已经使用AppWidgetManager.getAppWidgetIds但它总是返回一个空列表.

我也常常AppWidgetManager.getInstalledProviders确保我的ComponentName是正确的,但我仍然得到一个空列表.

我已经看到了关于这一切的所有其他问题,但我找不到对我有用的东西.

还有另一种解决方法吗?或者其他更新小部件的方法?

我的代码:

ComponentName name = new ComponentName(packageName, boardcastReceiverClass);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
int[] ids = appWidgetManager.getAppWidgetIds(name);
if (ids != null && ids.length > 0) {
   getApplicationContext().sendBroadcast(getUpdateIntent(ids[0]));
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

更新:我应该提到我的AppWidgetProvider是在一个库项目中.根据我得到的ComponentName getInstalledProviders,我使用了我的应用程序的包名称和类名以及库的包名称.

android android-appwidget

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

飞机模式关闭/打开后,广播接收器在onReceive()中接收的时间太长

我创建了一个简单的广播接收器,它工作得很好,除非我打开/关闭空中飞机模式,使用onReceive方法接收广播消息需要将近2分钟.另一件事是,如果我们启动应用程序然后如果我更改Air plane模式(开/关),则会导致问题,然后接收消息需要很长时间.

如果在启动应用程序之前有模式更改,则不会影响在onReceive方法中接收消息的时间.

源代码如下.

AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.broadcastreceiver"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.broadcastreceiver.BroadcastReceiverActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

       <receiver android:name="MyBroadcastReceiver" >
            <intent-filter>
                <action android:name="test.intent.action.QR_CODE_RECEIVER" />
            </intent-filter>
        </receiver>
    </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

BroadcastReceiverActivity.java

public class BroadcastReceiverActivity extends Activity {

    public static String qrCodeReceiver = "test.intent.action.QR_CODE_RECEIVER";

    @Override
    protected void onCreate(Bundle saveInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button broadcastBtn = (Button) findViewById(R.id.broadcastBtn);
        broadcastBtn.setOnClickListener(new View.onClickListener(){
            public void onClick(View v){
                //TODO …
Run Code Online (Sandbox Code Playgroud)

android broadcastreceiver airplane

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