Sayfalar

15 Temmuz 2012 Pazar

Android Uygulamalara Widget Entegrasyonu


Android’in en büyük güçlerinden biri olarak görülen widget’lar; kullanıcılara büyük bir kolaylık sağlamakla birlikte, geliştiriciler tarafından da rahatlıkla uygulamalarına entegre edilebiliyor.




Bunun için varolan Android projemizin /res dizininin altına /xml isimli dizin açıp, içine “appwidget.xml” isimli bir xml dosyası açıyoruz. İçini aşağıdaki şekilde dolduruyoruz.


appwidget.xml

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


android:updatePeriodMillis ‘ e girdiğimiz değer, widget’ın yenilenmesini istediğimiz sürenin milisaniye cinsinden hali olmalı. Bu örnekte her saat başı widget otomatik olarak onUpdate adlı metodunu çağıracaktır.


Widget’ın tabir-i caizse Activity’sini yazmak için “AppWidgetProvider” sınıfını extend eden bir sınıf yazmamız gerekiyor. Bu sınıf widget’ın programatik olarak neler yapması gerektiğini belirleyecek.




TestAppWidgetProvider.java

public class TestAppWidgetProvider extends AppWidgetProvider {


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

     try {
        updateWidgetContent(context, appWidgetManager);
     } catch (Exception e) {
        Log.e(DEBUG_TAG, "Failed", e);
     }
  }

  public static void updateWidgetContent(Context context,
     AppWidgetManager appWidgetManager) {


String testString = “App Widget Deneme”;
       RemoteViews remoteView = new RemoteViews(context.getPackageName(),      
           R.layout.appwidget_layout);
      remoteView.setTextViewText(R.id.textBox, testString );

      ComponentName testAppWidget = new ComponentName(context,
           TestAppWidgetProvider.class);
      appWidgetManager.updateAppWidget(testAppWidget , remoteView);
  }
}



Normal bir Activity’e layout tasarlar gibi widget için layout tasarlıyoruz.



appwidget_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/full_widget"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:background="@android:color/white">
       <ImageView
       android:id="@+id/logo"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:src="@drawable/logo"
       android:adjustViewBounds="true"
       android:scaleType="fitXY"
       android:background="@android:color/transparent"
       android:layout_alignParentLeft="true"
       android:layout_toRightOf="@id/logo"
       android:layout_centerHorizontal="true"
       android:maxWidth="100dp"
       android:minHeight="100dp" />
   <TextView
       android:id="@+id/textBox"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_toRightOf="@id/logo"
       android:textStyle="bold"
       android:textColor="@android:color/black"
       android:textSize="12dp"
       android:padding="2dp" />

   </RelativeLayout>


Son olarak uygulamanın manifest dosyasına gerekli bilgileri ekliyoruz. Uygulama cihaza yüklendiğinde otomatik olarak widget da yükleniyor ve kullanıcı istediği zaman ana ekranına ekleyebiliyor.

AndroidManifest.xml

<receiver android:name="com.example.widget.deneme.TestAppWidgetProvider">
  <intent-filter>
     <action
        android:name="android.appwidget.action.APPWIDGET_UPDATE" />
  </intent-filter>
  <meta-data
     android:name="android.appwidget.provider"
     android:resource="@xml/yemekhane_appwidget" />
</receiver>


Orhun Mert Şimşek


2 yorum:

  1. Kasım Can Şahin30 Kasım 2014 12:06

    Merhaba hocam yazınızı bi araştırma sonucunda buldum. Bunları yapmak için illa bilgisayarmı gerekiyor, telefonda apk editor var olurmu ? Varolan bir uygulamaya yapabilirmiyiz ? Mesela ben G.Play'den Death Note adlı not programı indirdim ama widgeti yok. Buna yapabilirmiyim ? Cevabınızı bekliyorum. Mail adresim : kasimcanshn@gmail.com

    YanıtlaSil