Lập trình Android — August 2, 2016 at 3:16 am

Tạo ứng dụng widget trên android

by

Widget hiện nay không còn quá xa lạ với tất cả người dùng hệ điều hành android, nó là một dạng ứng dụng chạy nền vô cùng tiện lợi giúp người dùng có thể thao tác nhanh hơn trên chiếc smartphone của mình. Ngay sau đây chúng tôi cũng chia sẻ với các bạn cách làm ứng dụng widget. Hãy cùng theo dõi nhé

Làm ứng dụng widget – giao diện chạy nền trong android

1) Giới thiệu thêm về widget:
– Widget là một ứng dụng chạy nền (ngay trên deskop).
– Để kéo một widget ra ngoài nền desktop của android, bạn phải vào menu và chọn tab “Widget”
– Widget không phải là 1 Activity.
– Widget được khai báo trong tập tin AndroidMenifest.xml trong cặp thẻ <receiver>
– Thông thường sử dụng 1 service chạy ngầm để quản lý một widget

2) Hướng dẫn code:
– res/values/strings.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<resources>

<string name=”parsed_data”>http://android.vn\nHướng dẫn bởi thanhlong90.it</string>
<string name=”app_name”>DemoAndroidWidget</string>
<string name=”action_settings”>Settings</string>
<string name=”hello_world”>Hello world!</string>
<string name=”statictext”>Static Text</string>

</resources>

– res/layout/widget_layout.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:id=”@+id/layout”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:layout_margin=”8dip”
android:background=”@drawable/myshape”
android:orientation=”vertical” >

<TextView
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:layout_marginTop=”5dp”
android:gravity=”center”
android:text=”@string/parsed_data”
android:textAppearance=”?android:attr/textAppearanceMedium”
android:textStyle=”bold” />

<TextView
android:id=”@+id/update”
style=”@android:style/TextAppearance.Medium”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:layout_gravity=”center”
android:layout_margin=”4dip”
android:gravity=”center_horizontal|center_vertical”
android:text=”@string/statictext” />

</LinearLayout>

– res/layout/widgetsimple_layout.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:id=”@+id/layout”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:layout_margin=”8dip”
android:background=”@drawable/mysimpleshape”
android:orientation=”vertical” >

<TextView
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:layout_marginTop=”5dp”
android:gravity=”center”
android:text=”@string/parsed_data”
android:textAppearance=”?android:attr/textAppearanceMedium” >
</TextView>

<TextView
android:id=”@+id/update”
style=”@android:style/TextAppearance.Medium”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:layout_gravity=”center”
android:layout_margin=”4dip”
android:gravity=”center_horizontal|center_vertical”
android:text=”@string/statictext” >
</TextView>

</LinearLayout>

– res/xml/widget_info.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<appwidget-provider xmlns:android=”http://schemas.android.com/apk/res/android”
android:initialLayout=”@layout/widget_layout”
android:minHeight=”72dp”
android:minWidth=”146dp”
android:resizeMode=”horizontal|vertical”
android:updatePeriodMillis=”180000″ >

</appwidget-provider>

– res/xml/widgetsimple_info.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<appwidget-provider xmlns:android=”http://schemas.android.com/apk/res/android”
android:initialLayout=”@layout/widgetsimple_layout”
android:minHeight=”72dp”
android:minWidth=”146dp”
android:resizeMode=”horizontal|vertical”
android:updatePeriodMillis=”180000″ >

</appwidget-provider>

– MyWidgetProvider.java

package thanhlong90.it.demoandroidwidget;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class MyWidgetProvider extends AppWidgetProvider {

private static final String LOG = “de.vogella.android.widget.example”;

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

Log.v(LOG, “onUpdate method called”);
// Get all ids
ComponentName thisWidget = new ComponentName(context, MyWidgetProvider.class);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);

// Build the intent to call the service
Intent intent = new Intent(context.getApplicationContext(), UpdateWidgetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);

// Update the widgets via the service
context.startService(intent);
}
}

– MyWidgetProviderSimple.java

package thanhlong90.it.demoandroidwidget;

import java.util.Random;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.RemoteViews;

public class MyWidgetProviderSimple extends AppWidgetProvider {

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

// Get all ids
ComponentName thisWidget = new ComponentName(context, MyWidgetProviderSimple.class);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);

for (int widgetId : allWidgetIds) {
// Create some random data
int number = (new Random().nextInt(100));

RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widgetsimple_layout);
Log.w(“WidgetExample”, String.valueOf(number));
// Set the text to the view with the id R.id.update
// instead of -1
remoteViews.setTextViewText(R.id.update, String.valueOf(number));

// Register an onClickListener
Intent intent = new Intent(context, MyWidgetProviderSimple.class);

intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.update, pendingIntent);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
}
}

– UpdateWidgetService.java

package thanhlong90.it.demoandroidwidget;

import java.util.Random;

import android.app.PendingIntent;
import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import android.widget.RemoteViews;

public class UpdateWidgetService extends Service {
private static final String LOG = “thanhlong90.it.demoandroidwidget.UpdateWidgetService”;

@Override
public void onStart(Intent intent, int startId) {
Log.i(LOG, “Called”);

// Create some random data
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this.getApplicationContext());

int[] allWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);

ComponentName thisWidget = new ComponentName(getApplicationContext(), MyWidgetProvider.class);
int[] allWidgetIds2 = appWidgetManager.getAppWidgetIds(thisWidget);
Log.w(LOG, “From Intent” + String.valueOf(allWidgetIds.length));
Log.w(LOG, “Direct” + String.valueOf(allWidgetIds2.length));

for (int widgetId : allWidgetIds) {
// Create some random data
int number = (new Random().nextInt(100));

RemoteViews remoteViews = new RemoteViews(this.getApplicationContext().getPackageName(), R.layout.widget_layout);
Log.w(“WidgetExample”, String.valueOf(number));
// Set the text
remoteViews.setTextViewText(R.id.update, “Random: ” + String.valueOf(number));

// Register an onClickListener
Intent clickIntent = new Intent(this.getApplicationContext(), MyWidgetProvider.class);

clickIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);

PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.update, pendingIntent);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
stopSelf();
// super.onStart(intent, startId);
}

@Override
public IBinder onBind(Intent intent) {
return null;
}
}

5/ Kết quả

device-2013-10-31-095743

Hy vọng với bài viết chia sẻ này sẽ là những thông tin bổ ích dành cho bạn. Xin cảm ơn đã theo dõi!

Nguồn: Android.vn

Leave a Comment

Your email address will not be published. Required fields are marked *