آموزش ساخت ویجت اندروید
آموزش ساخت ویجت اندروید
ویجت یک برنامه ی کوچک و یا یک کنترل از برنامه ی اندروید شما می باشد که در صفحه ی home قرار گرفته است. ویجت ها می توانند به راحتی در دسترس باشند، چرا که به شما اجازه می دهند تا برنامه های مورد علاقه ی خود را روی صفحه home قرار دهید تا به سرعت به آنها دسترسی داشته باشید. احتمالا چند ویجت متداول از جمله ویجت موسیقی، آب و هوا و ساعت، را دیده اید.
ویجت ها می توانند انواع مختلفی داشته باشند از قبیل ویجت اطلاعات، ویجت های مجموعه، ویجت های کنترل و ویجت های چندگانه. اندروید یک چارچوب کامل به ما ارائه می دهد تا ویجت های خود را گسترش دهیم.
فایل Widget – XML
برای اینکه یک برنامه ی ویجت ایجاد کنید، اولین چیزی که لازم دارید یک شئ AppWidgetProviderInfo می باشد که در یک فایل Widget – XML مجزا تعریف خواهید کرد. برای انجام این کار روی پروژه ی خود راست کلیک کنید و یک فولدر جدید به نام xml ایجاد کنید. حالا روی فایل تازه ایجاد شده راست کلیک کرده و یک فایل XML جدید ایجاد کنید. نوع ذخیره ی فایل XML باید روی AppWidgetProvider تنظیم شده باشد. در فایل xml برخی ویژگی ها را تعریف کنید که به قرار زیر می باشد.
<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>
فایل layout – widget
اکنون شما باید لایه ی ویجت خود را در فایل پیش فرض XML خود تعریف کنید. شما می توانید برای تولید یک xml خودکار، مولفه ها را درگ کنید.
فایل Java – widget
پس از تعریف لایه ، اکنون می توانید یک فایل جاوای جدید ایجاد کنید یا از فایل موجود آن استفاده کنید که از کلاس AppWidgetProvider ارث بری کند و متد های آپدیت آن را مانند زیر پیاده سازی کنید.
در متد آپدیت شما باید شئ های دو کلاس را تعریف کنید که این دو کلاس عبارتند از PendingIntent و RemoteViews. ترکیب آن به قرار زیر می باشد
PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.activity_main);
در انتها شما باید متد آپدیت updateAppWidget() را از کلاس AppWidgetManager فرا بخوانید. ترکیب آن مانند زیر می باشد
appWidgetManager.updateAppWidget(currentWidgetId,views);
علاوه بر متد updateAppWidget، متد های دیگری برای اجرای ویجتها در این کلاس تعریف شده اند که به قرار زیر می باشند
-
onDeleted(Context context, int[] appWidgetIds)
این متد زمانی فراخوانده می شود که نمونه ای از AppWidgetProvider حذف شده باشد.
-
onDisabled(Context context)
این متد زمانی فراخوانده می شود که آخرین نمونه ی AppWidgetProvider حذف شده باشد.
-
onEnabled(Context context)
این متد زمانی فراخوانده می شود که یک نمونه از AppWidgetProvider ایجادشده باشد.
-
onReceive(Context context, Intent intent)
این متد برای به پایان رساندن فراخوانی ها به متد های متفاوت از کلاس استفاده می شود.
فایل Widget – Manifest
شما باید کلاس AppWidgetProvider را در فایل manifest خود مانند زیر اعلام کنید
<receiver android:name="PRGAppWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/PRG_appwidget_info" />
</receiver>
مثال
در اینجا مثالی را می بینید که استفاده از برنامه ی ویجت را توضیح می دهد. این مثال یک برنامه ی پایه ایجاد می کند که این وبسایت را در مرورگر باز می کند.
برای انجام این مثال باید آن را روی دستگاهی اجرا کنید که در آن intent در حال اجرا می باشد.
-
برای ایجاد یک برنامه ی اندروید از Eclipse IDE استفاده خواهید کرد و آن را با عنوان Widget به عنوان بسته ی com.PRG.widget نام گذاری کنید. زمان ایجاد این برنامه مطمئن شوید که Target SDKو Compile With در آخرین ورژن Android SDK هستند تا از سطوح بالاتر API استفاده کنید.
-
فایل src/MainActivity.java را برای افزودن کد ویجت تغییر دهید.
-
res/layout/activity_main را برای افزودن مولفه های XML مربوطه تغییر دهید.
-
یک فولدر جدید و یک فایل xml با نام res/xml/mywidget.xml ایجاد کنید تا مولفه های XML مربوطه را اضافه کنید.
-
AndroidManifest.xml را برای افزودن اجازه های لازم تغییر دهید.
-
برنامه را اجرا کنید و یک دستگاه اجرایی اندروید انتخاب کرده و برنامه را روی آن نصب کنید و نتایج را بررسی کنید.
در ادامه محتوای تغییر یافته ی فایل MainActivity.java را مشاهده می کنید.
package com.PRG.widget;
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();
}
}
}
در اینجا محتوای تغییریافته ی فایل res/layout/activity_main.xml را می بینید.
<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>
در ادامه محتوای 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>
در ادامه محتوای res/values/string.xml می باشد.
<string name="app_name">My Application</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
</resources>
در اینجا محتوای فایل AndroidManifest.xml را مشاهده می کنید.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.PRG.widget" >
<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>
</receive>
</application>
</manifest>
اجازه بدهید برنامه ی Widget شما را اجرا کنیم. فرض می کنیم که دستگاه موبایل اندروید خود را به کامپیوتر متصل کرده اید. برای اجرای برنامه از Eclipse، یکی ازفایل های فعالیت پروژه را باز کرده و روی آیکن Run از تولبار کلیک کنید.
دستگاه موبایل خود را به عنوان یک گزینه انتخاب کرده و سپس آن را بررسی کنید که صفحه ی پیش فرض شما را نمایش می دهد.
به بخش ویجت خود رفته و ویجت ایجاد شده ی خود را روی صفحه یا homescreen اضافه کنید، که چیزی شبیه تصویر زیر خواهد بود.
اکنون روی دکمه ی widget که ظاهر شده ضربه بزنید تا مرورگر آغاز به کار کند. اما قبل از آن لطفا مطمئن باشید که به اینترنت متصل هستید. پس از فشاردادن دکمه صفحه ی زیر ظاهر خواهد شد.
توجه داشته باشید که تنها با تغییر url در فایل جاوا، ویجت شما وب سایت مورد نظرتان را در مرور گر باز خواهد کرد.
- نوشته شده توسط سعید نوشادی
- بازدید: 7367