34. Разработка приложений для ОС Android. Создание простого виджета

1) Добавим ImageButton и это будет виджет по нажатию на нему будет открыться сайт в браузере.
2) При создании виджетов можно использовать только FrameLayout, LinearLayout и RelativeLayout, также среди разрешенных компонентов есть только AnalogClock, Button, ImageButton, ChronometerImageView, ProgressBarTextView и ViewFlipper.
3) Создаем XML файл widget.xml с типом ресурса AppWidget Provider, далее нужно ввести:
  • Min width - количество ячеек которое мы хотим задать * 74 - 2
  • Update period millis - период обновления
  • Initial layout - наш layout


4) В AndroidManifest.xml удаляем activity и вместо него добавляем receiver.

        <receiver android:name="Main">
            <intent-filter >
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
            </intent-filter>
            <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget" />
        </receiver>

5) Добавляем User Permission типа android.permission.INTERNET
6) Изменяем код в Main.java

package com.example.mywidget;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.view.Menu;
import android.widget.RemoteViews;

public class Main extends AppWidgetProvider {

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        // TODO Auto-generated method stub
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        for (int i = 0; i < appWidgetIds.length; i++) {
            int appWidgetId = appWidgetIds[i];
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://google.com"));
            // далее задаем PendingIntent, который будет срабатывать по нажатию на кнопку
            PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0);
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
            views.setOnClickPendingIntent(R.id.imageButton1, pending);
            appWidgetManager.updateAppWidget(appWidgetId, views);
        }
    }

}