Android - Widgets

Um widget é um pequeno gadget ou controle de seu aplicativo Android colocado na tela inicial. Os widgets podem ser muito úteis, pois permitem que você coloque seus aplicativos favoritos na tela inicial para acessá-los rapidamente. Você provavelmente já viu alguns widgets comuns, como widget de música, widget de clima, widget de relógio, etc.

Os widgets podem ser de vários tipos, como widgets de informação, widgets de coleção, widgets de controle e widgets híbridos. O Android nos fornece uma estrutura completa para desenvolver nossos próprios widgets.

Widget - arquivo XML

Para criar um widget de aplicativo, a primeira coisa que você precisa é o objeto AppWidgetProviderInfo, que definirá em um arquivo XML de widget separado. Para fazer isso, clique com o botão direito no seu projeto e crie uma nova pasta chamadaxml. Agora, clique com o botão direito na pasta recém-criada e crie um novo arquivo XML. O tipo de recurso do arquivo XML deve ser definido comoAppWidgetProvider. No arquivo xml, defina algumas propriedades que são as seguintes -

<appwidget-provider 
   xmlns:android="http://schemas.android.com/apk/res/android" 
   android:minWidth="146dp" 
   android:updatePeriodMillis="0" 
   android:minHeight="146dp" 
   android:initialLayout="@layout/activity_main">
</appwidget-provider>

Widget - Arquivo de layout

Agora você tem que definir o layout do seu widget em seu arquivo XML padrão. Você pode arrastar componentes para gerar xml automático.

Widget - arquivo Java

Após definir o layout, agora crie um novo arquivo JAVA ou use um existente e amplie-o com AppWidgetProvider classe e sobrescrever seu método de atualização como segue.

No método de atualização, você deve definir o objeto de duas classes que são PendingIntent e RemoteViews. Sua sintaxe é -

PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.activity_main);

No final, você deve chamar um método de atualização updateAppWidget () da classe AppWidgetManager. Sua sintaxe é -

appWidgetManager.updateAppWidget(currentWidgetId,views);

Além do método updateAppWidget, existem outros métodos definidos nesta classe para manipular widgets. Eles são os seguintes -

Sr. Não Método e Descrição
1

onDeleted(Context context, int[] appWidgetIds)

Isso é chamado quando uma instância de AppWidgetProvider é excluída.

2

onDisabled(Context context)

Isso é chamado quando a última instância de AppWidgetProvider é excluída

3

onEnabled(Context context)

Isso é chamado quando uma instância de AppWidgetProvider é criada.

4

onReceive(Context context, Intent intent)

É usado para despachar chamadas para os vários métodos da classe

Widget - arquivo de manifesto

Você também deve declarar a classe AppWidgetProvider em seu arquivo de manifesto da seguinte maneira:

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

Exemplo

Aqui está um exemplo que demonstra o uso do aplicativo Widget. Ele cria um aplicativo widget básico que abrirá o site atual no navegador.

Para experimentar este exemplo, você precisa executá-lo em um dispositivo real no qual a Internet esteja sendo executada.

Passos Descrição
1 Você usará o Android Studio para criar um aplicativo Android em um pacote com.example.sairamkrishna.myapplication.
2 Modifique o arquivo src / MainActivity.java para adicionar o código do widget.
3 Modifique res / layout / activity_main para adicionar os respectivos componentes XML
4 Crie uma nova pasta e arquivo xml em res / xml / mywidget.xml para adicionar os respectivos componentes XML
5 Modifique o AndroidManifest.xml para adicionar as permissões necessárias
6 Execute o aplicativo e escolha um dispositivo Android em execução, instale o aplicativo nele e verifique os resultados.

A seguir está o conteúdo do modificado MainActivity.java.

package com.example.sairamkrishna.myapplication;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.widget.RemoteViews;
import android.widget.Toast;

public class MainActivity extends AppWidgetProvider{
   public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
      for(int i=0; i<appWidgetIds.length; i++){
         int currentWidgetId = appWidgetIds[i];
         String url = "http://www.tutorialspoint.com";
         
         Intent intent = new Intent(Intent.ACTION_VIEW);
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         intent.setData(Uri.parse(url));
         
         PendingIntent pending = PendingIntent.getActivity(context, 0,intent, 0);
         RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.activity_main);
         
         views.setOnClickPendingIntent(R.id.button, pending);
         appWidgetManager.updateAppWidget(currentWidgetId,views);
         Toast.makeText(context, "widget added", Toast.LENGTH_SHORT).show();
      }
   }
}

A seguir está o conteúdo modificado do xml res/layout/activity_main.xml.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin"
   tools:context=".MainActivity"
   android:transitionGroup="true">
   
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:id="@+id/textView"
      android:layout_centerHorizontal="true"
      android:textColor="#ff3412ff"
      android:textSize="35dp" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Widget"
      android:id="@+id/button"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="61dp"
      android:layout_below="@+id/textView" />

</RelativeLayout>

A seguir está o conteúdo do res/xml/mywidget.xml.

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider 
   xmlns:android="http://schemas.android.com/apk/res/android" 
   android:minWidth="146dp" 
   android:updatePeriodMillis="0" 
   android:minHeight="146dp" 
   android:initialLayout="@layout/activity_main">
</appwidget-provider>

A seguir está o conteúdo do res/values/string.xml.

<resources>
   <string name="app_name">My Application</string>
</resources>

A seguir está o conteúdo de AndroidManifest.xml Arquivo.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >
   
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      <receiver android:name=".MainActivity">
      
      <intent-filter>
         <action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action>
      </intent-filter>
      
      <meta-data android:name="android.appwidget.provider"
         android:resource="@xml/mywidget"></meta-data>
      
      </receiver>
   
   </application>
</manifest>

Vamos tentar executar seu aplicativo. Presumo que você tenha conectado o seu dispositivo Android Mobile real ao computador. Para executar o aplicativo do Android Studio, abra um dos arquivos de atividade do seu projeto e clique no ícone Executar na barra de ferramentas. Antes de iniciar seu aplicativo, o Android Studio exibirá a janela a seguir para selecionar uma opção onde você deseja executar seu aplicativo Android.

Selecione seu dispositivo móvel como uma opção e, em seguida, verifique seu dispositivo móvel, que exibirá sua tela padrão -

Vá para a seção de widgets e adicione o widget criado à área de trabalho ou à tela inicial. Seria mais ou menos assim -

Agora, basta tocar no botão do widget que aparece para iniciar o navegador. Mas antes disso, certifique-se de que você está conectado à internet. Depois de pressionar o botão, a seguinte tela iria aparecer -

Nota. Alterando apenas o url no arquivo java, seu widget abrirá o site desejado no navegador.