Нужна помощь в вызове метода из виджета

#android #methods #android-widget #call #remoteview

#Android #методы #android-виджет #вызов #удаленный просмотр

Вопрос:

Я хочу вызвать определенный метод с именем «AllDoneNowCloseUp», который находится в PreferenceActivity из виджета.

Можете ли вы показать мне необходимую кодировку, чтобы это произошло?

Я думаю, что кодирование необходимо добавить в раздел onReceive в моем AppWidgetProvider и что-то делать с удаленными представлениями? Мне также нужно проверить, выполняется ли PreferenceActivity в фоновом режиме, если это возможно.

 public class ButtonWidget extends AppWidgetProvider {

public static String ON_OFF_BUTTON_CHOSEN = "Chime On/Off button was chosen";

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

    RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
            R.layout.appwidget_layout);

    Intent active = new Intent(context, ButtonWidget.class);
    active.setAction(ON_OFF_BUTTON_CHOSEN);

    PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context,
            0, active, 0);

    /*
     * Activate click event handler for the button.
     */
    remoteViews.setOnClickPendingIntent(R.id.button_on_off,
            actionPendingIntent);

    appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
}

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

    RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
            R.layout.appwidget_layout);

    // check, if our Action was called
    if (intent.getAction().equals(ON_OFF_BUTTON_CHOSEN)) {

        String strNotifyMessage = null;

        /*
         * Get all the settings from the settings xml file.
         */
        SharedPreferences clockSettings = PreferenceManager
                .getDefaultSharedPreferences(context);

        /*
         * Find out what the current state of the on/off mode is.
         */
        boolean booleanMasterChimeToggle = clockSettings
                .getBoolean("MasterChimeToggle", false);

        /*
         * Save the new state in the preferences.
         */
        SharedPreferences.Editor prefEditor = clockSettings
                .edit(); // Allow the settings to be changed.

        if (booleanMasterChimeToggle == true) {

            strNotifyMessage = "Chiming has now been DISABLED.";

            prefEditor.putBoolean("MasterChimeToggle", false);
            prefEditor.putBoolean("ChimeOnTheHour", false);
            prefEditor.putBoolean("ChimeOn15Past", false);
            prefEditor.putBoolean("ChimeOn30Past", false);
            prefEditor.putBoolean("ChimeOn45Past", false);

            remoteViews.setTextViewText(R.id.button_on_off, "Turn On"); 

        } else {

            strNotifyMessage = "Chiming has now been ENABLED.";

            prefEditor.putBoolean("MasterChimeToggle", true);
            prefEditor.putBoolean("ChimeOnTheHour", true);
            prefEditor.putBoolean("ChimeOn15Past", true);
            prefEditor.putBoolean("ChimeOn30Past", true);
            prefEditor.putBoolean("ChimeOn45Past", true);

            remoteViews.setTextViewText(R.id.button_on_off, "Turn Off"); 
        }

//          Toast.makeText(context, strNotifyMessage, Toast.LENGTH_LONG).show();

        prefEditor.commit(); // Save changes.

        /*
         * Display a message in the status bar showing the new chime on/off
         * state.
         */
        PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
                intent, 0);
        NotificationManager notificationManager = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        Notification noty = new Notification(R.drawable.icon,
                strNotifyMessage, System.currentTimeMillis());

        /*
         * This will show up when the user pull down the notice bar.
         */
        noty.setLatestEventInfo(context, "Notice:", strNotifyMessage,
                contentIntent);
        notificationManager.notify(1, noty);

    } else {
        // do nothing
    }

    super.onReceive(context, intent);
}
}
  

Ответ №1:

Если AllDoneNowCloseUp является статическим, вы можете получить к нему доступ из YourPreferenceActivityClassName.AllDoneNowCloseUp … но я предполагаю, что вы не хотите делать такой метод статическим — что он делает?

Комментарии:

1. Он просто закрывает экран PreferenceActivity на случай, если пользователь захочет увидеть изменения в настройках.

Ответ №2:

Я думаю, вам не удастся напрямую вызвать метод из виджета в действие. Вы должны использовать намерения и широковещательные передачи для связи между ними. PreferenceActivity должен иметь возможность получить это намерение в onNewIntent()

Комментарии:

1. Спасибо за ответ. Я новичок в этом. Можете ли вы показать кодировку, необходимую для его реализации?