- 製作要給小工具用的Layout,程式碼如下所示
- 製作小工具的設定檔,在其中設定最小高及寬(公式為:格數*70dp-30dp)、並在initialLayout中指定小工具要用的Layout(即步驟一建立的appwidgetlayout.xml)並將之放到res資料夾下的xml資料夾中,程式碼如下:
- 建立Reciver,在AndroidMainfest.xml的<application>節點內區域中,設定Reciver,程式碼如下,其中"MainActivity"可以更換至特定的AppwidgetProvider:
- 建立上一步AndroidManifest.xml中,Reciver定義的名子同名的AppwidgetProvider類別,並Override想要的方法,在這裡我們Override兩個方法,分別為onUpdate()及onRecive(),程式碼如下: MainActivity.java (注意這不是Activity,是Reciever):
- 其中因為有要跳轉到Activity2,所以不要忘記加入要跳轉的Activity2。而因為MainActivity是Reciever不是Activity,所以記得不要在AndroidManifest中設定其為Activity。
appwidgetlayout.xml :
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/buttonToToast" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按下後跳出訊息(Toast)" /> <Button android:id="@+id/buttonToNotify" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按下後發送通知(Notification)" /> <Button android:id="@+id/buttonToOpenActivity" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按下後前往另一個Activity" /> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/appwidgetlayout"
android:minHeight="180dp"
android:minWidth="320dp" />
<receiver android:name="MainActivity"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> </intent-filter> <meta-data android:resource="@xml/button_widget_provider" android:name="android.appwidget.provider"/> </receiver>
package com.example.appwidget_example; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; import android.widget.RemoteViews; import android.widget.Toast; public class MainActivity extends AppWidgetProvider { final String showToast = "showToast"; final String showNotification = "showNotification"; @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); // 得到RemoteViews,用來控制及設定App Widget的控件,如按鈕等 RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.appwidgetlayout); // 建立各個按鈕要進行的動作意圖(Intent),並利用putExtra()塞入資訊 Intent intentOfButtonToToast = new Intent(context, MainActivity.class); intentOfButtonToToast.setAction(showToast); intentOfButtonToToast.putExtra("Message", "送出Toast"); Intent intentOfButtonToNotify = new Intent(context, MainActivity.class); intentOfButtonToNotify.setAction(showNotification); intentOfButtonToNotify.putExtra("Message", "送出Notification"); Intent intentOfButtonToOpenActivity = new Intent(context, Activity2.class); // 將建立好的Intent塞到Pending Intent中 // 因為是要接收自訂的"showToast"廣播(Broadcast),使用getBroadcast() PendingIntent pendingIntentOfButtonToToast = PendingIntent .getBroadcast(context, 0, intentOfButtonToToast, 0); PendingIntent pendingIntentOfButtonToNotify = PendingIntent .getBroadcast(context, 0, intentOfButtonToNotify, 0); // 因為是想要前往另一個Activity,使用getActivity() PendingIntent pendingIntentOfButtonToOpenActivity = PendingIntent .getActivity(context, 0, intentOfButtonToOpenActivity, 0); // 將PendingIntent設定到remoteViews中 // 因為是按鈕按下才要執行的動作,使用setOnClickPendingIntent() remoteViews.setOnClickPendingIntent(R.id.buttonToToast, pendingIntentOfButtonToToast); remoteViews.setOnClickPendingIntent(R.id.buttonToNotify, pendingIntentOfButtonToNotify); remoteViews.setOnClickPendingIntent(R.id.buttonToOpenActivity, pendingIntentOfButtonToOpenActivity); // 使用onUpdate()傳入的addWidgetManager來執行更新App Widget的動作, // 並將remoteViews當參數傳入 appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); } @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub super.onReceive(context, intent); switch (intent.getAction()) { case showToast: Toast.makeText(context, intent.getStringExtra("Message"), Toast.LENGTH_LONG).show(); break; case showNotification: Toast.makeText(context, intent.getStringExtra("Message"), Toast.LENGTH_LONG).show(); //開始發送通知 PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, 0); NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new Notification(R.drawable.ic_launcher,"通知被發送",System.currentTimeMillis()); notification.setLatestEventInfo(context, "通知Title", intent.getStringExtra("Message"), contentIntent); notificationManager.notify(1,notification); break; } } }
沒有留言 :
張貼留言