Android 小部件不';重新启动手机时无法工作?

Android 小部件不';重新启动手机时无法工作?,android,android-widget,android-appwidget,Android,Android Widget,Android Appwidget,我有一个运行良好的小部件。一切正常,除非我重新启动手机。如果我重启手机,小部件不会显示任何数据。我在这里寻找答案,但我所发现的一切都不适合我 有人可以看看我的代码,告诉我问题出在哪里 提前谢谢 这是我的班级: @Override public void onReceive(Context context, Intent intent) { if (intent.hasExtra(WIDGET_IDS_KEY_RIGHT)) { int[] ids = intent.get

我有一个运行良好的小部件。一切正常,除非我重新启动手机。如果我重启手机,小部件不会显示任何数据。我在这里寻找答案,但我所发现的一切都不适合我

有人可以看看我的代码,告诉我问题出在哪里

提前谢谢

这是我的班级:

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.hasExtra(WIDGET_IDS_KEY_RIGHT)) {
        int[] ids = intent.getExtras().getIntArray(WIDGET_IDS_KEY_RIGHT);
        if (intent.hasExtra(WIDGET_DATA_KEY_RIGHT)) {
            Object data = intent.getExtras().getParcelable(WIDGET_DATA_KEY_RIGHT);
            this.update(context, AppWidgetManager.getInstance(context), ids, data);
        } else {
            this.onUpdate(context, AppWidgetManager.getInstance(context), ids);
        }
    } else super.onReceive(context, intent);

    if (intent.hasExtra(WIDGET_IDS_KEY_LEFT)) {
        int[] ids = intent.getExtras().getIntArray(WIDGET_IDS_KEY_LEFT);
        if (intent.hasExtra(WIDGET_IDS_KEY_LEFT)) {
            Object data = intent.getExtras().getParcelable(WIDGET_DATA_KEY_LEFT);
            this.update(context, AppWidgetManager.getInstance(context), ids, data);
        } else {
            this.onUpdate(context, AppWidgetManager.getInstance(context), ids);
        }
    } else super.onReceive(context, intent);

    if (intent.hasExtra(WIDGET_IDS_KEY_CENTRAL)) {
        int[] ids = intent.getExtras().getIntArray(WIDGET_IDS_KEY_CENTRAL);
        if (intent.hasExtra(WIDGET_IDS_KEY_CENTRAL)) {
            Object data = intent.getExtras().getParcelable(WIDGET_DATA_KEY_CENTRAL);
            this.update(context, AppWidgetManager.getInstance(context), ids, data);
        } else {
            this.onUpdate(context, AppWidgetManager.getInstance(context), ids);
        }
    } else super.onReceive(context, intent);

}


@Override
public void onEnabled(Context context) {
    super.onEnabled(context);

    startWidgetUpdateService(context);
}

protected static void startWidgetUpdateService(Context context) {
    Intent serviceIntent = new Intent(context, SimpleWidgetProvider.class);
    context.startService(serviceIntent);
}

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

    update(context, appWidgetManager, appWidgetIds, null);

}

public void update(Context context, AppWidgetManager manager, int[] ids, Object data) {

    for (int appWidgetId : ids) {

        preferences = PreferenceManager.getDefaultSharedPreferences(context);
        numberRight = preferences.getString(HmApplication.PREF_NUMBER_RIGHT, "");
        numberCentral = preferences.getString(HmApplication.PREF_NUMBER_CENTRAL, "");
        numberLeft = preferences.getString(HmApplication.PREF_NUMBER_LEFT, "");

        Intent callIntentRight = new Intent(Intent.ACTION_CALL);
        callIntentRight.setData(Uri.parse("tel:" + numberRight));
        Intent callIntentCentral = new Intent(Intent.ACTION_CALL);
        callIntentCentral.setData(Uri.parse("tel:" + numberCentral));
        Intent callIntentLeft = new Intent(Intent.ACTION_CALL);
        callIntentLeft.setData(Uri.parse("tel:" + numberLeft));

        PendingIntent pendingIntentRight = PendingIntent.getActivity(context, 0, callIntentRight, 0);
        PendingIntent pendingIntentCentral = PendingIntent.getActivity(context, 0, callIntentCentral, 0);
        PendingIntent pendingIntentLeft = PendingIntent.getActivity(context, 0, callIntentLeft, 0);


        preferences = PreferenceManager.getDefaultSharedPreferences(context);
        isCheckedOne = preferences.getBoolean(HmApplication.PREF_CHECKBOX_ONE, false);
        isCheckedTwo = preferences.getBoolean(HmApplication.PREF_CHECKBOX_TWO, false);
        isCheckedThree = preferences.getBoolean(HmApplication.PREF_CHECKBOX_THREE, false);



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



        if(isCheckedOne == true){

            views = new RemoteViews(context.getPackageName(), R.layout.simple_widget_one);
            views.setTextViewText(R.id.actionButtonLeft, Main.textNamePhoneLeft);
        }

        if(isCheckedTwo == true){
            views = new RemoteViews(context.getPackageName(), R.layout.simple_widget_two);
            views.setTextViewText(R.id.actionButtonLeft, Main.textNamePhoneLeft);
            views.setTextViewText(R.id.actionButtonCentral, Main.textNamePhoneCentral);
        }


            views.setOnClickPendingIntent(R.id.actionButtonRight, pendingIntentRight);
            views.setOnClickPendingIntent(R.id.actionButtonCentral, pendingIntentCentral);
            views.setOnClickPendingIntent(R.id.actionButtonLeft, pendingIntentLeft);
            views.setTextViewText(R.id.actionButtonLeft, Main.textNamePhoneLeft);
            views.setTextViewText(R.id.actionButtonCentral, Main.textNamePhoneCentral);
            views.setTextViewText(R.id.actionButtonRight, Main.textNamePhoneRight);

            manager.updateAppWidget(appWidgetId, views);
    }
}

public void updateMyWidgets(Context context) {
    AppWidgetManager man = AppWidgetManager.getInstance(context);
    int[] ids = man.getAppWidgetIds(new ComponentName(context, SimpleWidgetProvider.class));

    preferences = PreferenceManager.getDefaultSharedPreferences(context);
    numberRight = preferences.getString(HmApplication.PREF_NUMBER_RIGHT, "");
    numberCentral = preferences.getString(HmApplication.PREF_NUMBER_CENTRAL, "");
    numberLeft = preferences.getString(HmApplication.PREF_NUMBER_LEFT, "");

    Intent updateIntent = new Intent();
    updateIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
    updateIntent.putExtra(SimpleWidgetProvider.WIDGET_IDS_KEY_RIGHT, ids);
    updateIntent.putExtra(SimpleWidgetProvider.WIDGET_DATA_KEY_RIGHT, numberRight);
    updateIntent.putExtra(SimpleWidgetProvider.WIDGET_IDS_KEY_CENTRAL, ids);
    updateIntent.putExtra(SimpleWidgetProvider.WIDGET_DATA_KEY_CENTRAL, numberCentral);
    updateIntent.putExtra(SimpleWidgetProvider.WIDGET_IDS_KEY_LEFT, ids);
    updateIntent.putExtra(SimpleWidgetProvider.WIDGET_DATA_KEY_LEFT, numberLeft);
    context.sendBroadcast(updateIntent);
}
这是我的舱单:

   <receiver android:name=".SimpleWidgetProvider"
        android:label="myWidget">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
            <action android:name="android.appwidget.action.APPWIDGET_ENABLED" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider"
            android:resource="@xml/simple_widget_info" />
    </receiver>

实现
android.intent.action.BOOT\u完成
receiver和onreceive方法调用您的方法
updateMyWidgets
更新小部件

您需要在清单中用action name
android.intent.action.BOOT\u COMPLETED
定义一个接收者

<!-- Start the Service if applicable on boot -->
<receiver android:name="com.test.MyReceiver ">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

实现
android.intent.action.BOOT\u COMPLETED
receive方法调用方法
updateMyWidgets
更新小部件

您需要在清单中用action name
android.intent.action.BOOT\u COMPLETED
定义一个接收者

<!-- Start the Service if applicable on boot -->
<receiver android:name="com.test.MyReceiver ">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

好的,你能给我一个简短的代码,你能告诉我的这个IMemmentation吗。。我试过了,但没用…好的,你能给我一个简短的代码,你能告诉我这个iImplementation。。我试过了,但没用。。。
public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
       YourClass.updateMyWidgets();// you may need to make this method static.
    }
}