Подтвердить что ты не робот

Начать работу, нажав на виджет

Я новичок в программировании Android, и я пытаюсь сделать виджет, который сможет получить некоторые данные от ISP о моей учетной записи. Есть много неизвестных вещей, как это сделать, но я сделал несколько вещей - у меня есть виджет с настройкой активности, где пользователь должен вводить логин и пароль. Виджет хранит данные в SharedPerferences, а когда он обновляет виджет, я пользуюсь службой для запуска AsyncTask, чтобы получить от ISP данные учетной записи. Теперь я хочу начать работу, нажав на виджет. Я пробовал все советы, которые я нашел на этом сайте, и виджет не может начать работу. Мой виджет на основе другого виджета, который размещен здесь https://github.com/Arturus/MetrikaWidget. Я не понимаю, что и где я должен изменить, чтобы начать работу, нажав на мой виджет. Спасибо.

UPDATE: Моя функция обновления, где я предлагаю разместить PendingIntent

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
{
    Log.d(TAG, "onUpdate");

    for (int appWidgetId : appWidgetIds)
    {
        updateAppWidget(context, appWidgetManager, appWidgetId);
    }

    /* An updateAppWidget functions looks like as:

    Intent intent = new Intent(context, UpdateWidgetService.class);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
    context.startService(intent);
    */

    Intent intent = new Intent(context, DetailedStatActivity.class);
    PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);

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

    views.setOnClickPendingIntent(R.id.layout, pendingIntent);

    ComponentName componentName = new ComponentName(context.getPackageName(), WidgetProvider.class.getName());

    appWidgetManager.updateAppWidget(componentName, views);
}
4b9b3361

Ответ 1

Используйте этот фрагмент в onUpdate() методе вашего виджета AppWidgetProvider class:

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widgetlayout);
    Intent configIntent = new Intent(context, Activity.class);

    PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);

    remoteViews.setOnClickPendingIntent(R.id.widget, configPendingIntent);
    appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
}     

Здесь widgetlayout - это имя вашего макета виджетов, а R.id.widget - это идентификатор родительского макета.

Edit:
Теперь, я вижу ваш код, который вы добавили в свой вопрос. Вы должны были сделать:

PendingIntent.getActivity(context, 0, configIntent, 0);

(это начало операции) вместо

PendingIntent.getService(...);

который пытается запустить service.Good luck.

Литература:
doityourselfandroid.com

helloandroid.com

Ответ 2

Intent inet = new Intent(your_action);
inet.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pIntentNetworkInfo = PendingIntent.getActivity(context, 2, 
            inet, Intent.FLAG_ACTIVITY_NEW_TASK);
remoteViews.setOnClickPendingIntent(you_component_when_the_user_pressing_this_activity_should_start, pIntentNetworkInfo);

Ответ 3

Я не знаю о "Создание виджета из другого виджета". Это из моих знаний, но я предлагаю вам создать собственный виджет.

Кроме того, вызывать активность из виджета следует использовать PendingIntent

Вот простой пример, чтобы сделать это

Intent iSetting = new Intent(this, MyConfig.class);
PendingIntent piSetting = PendingIntent.getActivity(this, 0, iSetting, 0);
views.setOnClickPendingIntent(R.id.IdComponent, piSetting);

Или вам может понадобиться эта ссылка и эта ссылка p >