12/08/2018, 14:46

Tạo ứng dụng widget đơn giản

Các bạn dùng android chắc hẳn không xa lạ gì với widget . Vậy ta đặt ra câu hỏi widget là gì ? Khái niệm widget có nghĩa là một thiết bị nhỏ, đính kèm theo một dụng cụ nào đó. Trên Android, bạn có thể hiểu widget chính là những ứng dụng nhỏ gắn trên màn hình chính của Launcher. Những ứng dụng nhỏ ...

Các bạn dùng android chắc hẳn không xa lạ gì với widget . Vậy ta đặt ra câu hỏi widget là gì ?

Khái niệm widget có nghĩa là một thiết bị nhỏ, đính kèm theo một dụng cụ nào đó. Trên Android, bạn có thể hiểu widget chính là những ứng dụng nhỏ gắn trên màn hình chính của Launcher. Những ứng dụng nhỏ này có khả năng liên kết và hiển thị thông tin từ các ứng dụng lớn khác hoặc thực hiện những chức năng của riêng nó, không phụ thuộc vào ứng dụng nào. Widget chỉ mới xuất hiện trên thiết bị di động trong những năm gần đây. Nhờ vào màn hình cảm ứng, việc thêm/xóa, di chuyển, sắp xếp và sử dụng widget đã trở nên dễ dàng hơn.

Trong bài viết dưới đây mình giúp các bạn tạo 1 widget cực kì đơn giản để tắt bật đèn flash máy ảnh .(một ứng dụng nhỏ nhưng thực sự rất tiện lợi)

Để thực hiện 1 app widget chúng ta cần chú ý các điểm sau :

  • 1 class extends AppWidgetProvider :
  • 1 class extends BroadcastReceiver : class xử lí các xự kiện từ hệ thống ( tắt bật Flash )
  • File AndroidManifest.xml.
  • Flie khai báo layout cho widget trong res/xml Sau đây mình sẽ hướng dẫn các bạn thao tác với từng file :

Tạo file giao diện widget :

  • B1 : bạn tao 1 file giao diện wiget như bình thường. Ở đây mình dùng 1 button có 2 trạng thái on/off để thể hiện . Mình tạo file main.xml trong folder res/layout như các app bình thường.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_awidth="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button"
        android:layout_awidth="match_parent"
        android:layout_height="match_parent"
        android:text="Turn on" />
</LinearLayout>
  • B2 : sau khi tạo file layout xong, trong thư mục /res mình tạo thêm 1 thư mục xml trong đó tạo 1 file flashwidget.xml (res/xml/flashwidget.xml ) với nội dung như sau :
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="1dp"
    android:minHeight="1dp"
    android:updatePeriodMillis="86400000"
    android:initialLayout="@layout/main"
    android:resizeMode="horizontal|vertical"
    android:widgetCategory="home_screen|keyguard" />

Ở đây các bạn chú ý có trường android:initialLayout="@layout/main" .

Sửa file AndroidManifest.xml

Mình gửi các bạn file manifest mình đã làm :

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.flashlightwidget"
    android:versionCode="1"
    android:versionName="0.1">  

    <uses-sdk android:minSdkVersion="5" />
    <uses-permission android:name="android.permission.CAMERA" />

    <application android:allowBackup="true"
        android:label="@string/app_name"
        android:icon="@drawable/ic_launcher"
        android:theme="@style/AppTheme">
        
        <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/flashwidget" />
        </receiver>

        <receiver android:name="Receiver">
            <intent-filter>
                <action android:name="com.test.flashwidget.FLASHLIGHT"></action>
            </intent-filter>
        </receiver>

    </application>

</manifest>

Ở trên ban thấy app widget không hề cần filter :

<action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.LAUNCHER" />

Vì bản chất 1 app widget không cần icon thể hiện để start app trong launcher             </div>
            
            <div class=

0