日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Android開發之AppWidget詳解

瀏覽:12日期:2022-09-19 16:39:29

Android通知系統是它的一大特色,而其中,AppWidget是其中一個亮點。在開發應用的中,很多時候可以為其添加一個AppWidget顯示在桌面中,及時方便的與用戶進行

交互。這里就簡單的熟悉一下開發一個AppWidget的流程吧。

想要在應用中創建一個AppWidget,至少需要以下幾樣東西:

需要創建一個AppWidgetProviderInfo,來描述AppWidget的元數據。 需要實現一個自己的AppWidgetProvider對AppWidget進行更新等操作。 需要布局文件來描述AppWidget的布局。

那么,下面就開始創建一個AppWidget吧。

一、在AndroidManifest.xml中聲明一個AppWidget

首先我們需要在AndroidManifest.xml中聲明AppWidgetProvider。格式如下:

<receiver android:name='MyAppWidgetProvider' > <intent-filter> <action android:name='android.appwidget.action.APPWIDGET_UPDATE' /> </intent-filter> <meta-data android:name='android.appwidget.provider' android:resource='@xml/my_appwidget_info' /> </receiver>

可以看出AppWidgetProvider實際上就是一個BroadcastReceiver,它接收特定的Broadcast。<meta-data>標簽描述了AppWidget所使用的元數據,android:resource則聲明了定義元數據的xml文件的位置。

二、添加AppWidgetProviderInfo元數據

AppWidgetProviderInfo描述了AppWidget的本質特性,例如,AppWidget更新的周期,最小的寬度、長度,所使用的布局文件是什么,以及添加AppWidget需要啟動的

configuration Activity等。我們需要在XML中來定義AppWidgetProviderInfo對象,這個XML文件應該保存在res/xml文件夾下。下面是一個范例:

<appwidget-provider xmlns:android='http://schemas.android.com/apk/res/android' android:minWidth='294dp' android:minHeight='72dp' android:updatePeriodMillis='86400000' android:previewImage='@drawable/preview' android:initialLayout='@layout/example_appwidget' android:configure='com.example.android.MyAppWidgetConfigure' android:resizeMode='horizontal|vertical'> </appwidget-provider>

<appwidget-provider>需要使用這個標簽來定義AppWidgetProviderInfo。下面對范例中使用到的屬性做下說明。

minWidthminHeight定義了AppWidget需要占據的最小的空間。

updatePeriodMillis定義了大概多久AppWidget需要更新一次,這里定義的只是一個大概的時間,系統不能做出精確的保證。

previewImage定義了在用戶選擇AppWidget時做現實的圖標。

initialLayout定義了AppWidget所使用的布局文件。

configure定義了AppWidget在添加的時候需要啟動的configuration Activity 用于執行配置的工作。

resizeMode定義了縮放模式。

三、創建AppWidget所使用的布局文件

在創建AppWidget時必須創建一個布局文件,為其提供布局描述。AppWidget創建視圖時,需要根據RemoteViews來創建。而出于效率等因素的考慮,很多控件在

RemoteViews中是被支持的。以下列出能在RemoteViews中使用的UI控件:

layout : FrameLayout , LinearLayout , RelativeLayout

widget : AnalogClock , Button , Chronometer , ImageButton , ImageView , ProgressBar , TextView , ViewFlipper , ListView , GridView , StackView , AdapterViewFlipper

四、創建一個AppWidgetProvider的子類

前面提到過AppWidgetProvider就是一個BroadcastReceiver。對,它其實確實是繼承自BroadcastReceiver,只是它為了更加方便的處理AppWidget的廣播進行了封裝。

AppWidgetProvider在接收到AppWidget的廣播的時候,會根據類型分別觸發以下幾個方法:

onUpdate() : 當AppWidget需要更新時,會觸發這個方法,我們需要重寫這個方法,在里面實現更新的操作。如果沒有定義configuration Activity,那么在添加一個AppWidget

時,也會觸發此方法。

onDelete(Context , int[] ):當AppWidget從AppWidgetHost中刪除時,會觸發此方法。

onEnabled(Context ):如果為一個應用添加了多個AppWidget,只有在第一個AppWidget被添加時,此方法才會被調用。

onDisabled(Context ):當一個應用的最后一個AppWidget從AppWidgetHost中刪除時,會觸發此方法。

onReceive(Context , Intent ):這實際上就是BroadcastReceiver中的方法,當任何一個Broadcast被接收到時,會調用此方法,并且會在以上回調方法之前被調用。

五、創建一個ConfigurationActivity(可選)

如果需要AppWidget添加的時候做一些配置工作,就可以使用Configuration Activity。要使用ConfigurationActivity首先需要像普通的Activity一樣在AndroidManifest.xml中

進行聲明:

<activity android:name='.ExampleAppWidgetConfigure'> <intent-filter> <action android:name='android.appwidget.action.APPWIDGET_CONFIGURE'/> </intent-filter> </activity>

只是這里需要添加action類型為android.appwidget.action.APPWIDGET_CONFIGURE的intent-filter。然后,需要在AppWidgetProviderInfo中進行聲明:

<appwidget-provider xmlns:android='http://schemas.android.com/apk/res/android' ... android:configure='com.example.android.ExampleAppWidgetConfigure' ... > </appwidget-provider>

最后,當然是需要創建Activity了,在Configuration Activity中,需要執行一些必要的操作:

1、獲取AppWidget ID

Intent intent = getIntent(); Bundle extras = intent.getExtras(); if (extras != null) { mAppWidgetId = extras.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); }

2、進行必要的配置操作,獲取AppWidgetManager實例、更新RemoteViews

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget); appWidgetManager.updateAppWidget(mAppWidgetId, views);

3、設置Activity result,并且返回一個Intent。

Intent resultValue = new Intent(); resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); setResult(RESULT_OK, resultValue); finish();

這樣一個就創建好了一個Configuration Activity了。

注意android8.0以后無法收到發給自己的AppWidgetProvider,需要添加

intent.setComponent(new ComponentName(context,CacheProvider.class));

Intent intent = new Intent();intent.setAction(ACTION_CACHE_CLEAN);intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);intent.setComponent(new ComponentName(context,CacheProvider.class));PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);remoteViews.setOnClickPendingIntent(R.id.tv_clean, pendingIntent);

執行完上面的步驟,就已經創建了一個可以在桌面進行顯示的AppWidget了。

以上就是Android開發之AppWidget詳解的詳細內容,更多關于Android AppWidget詳解的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产毛片久久| 亚洲欧美日韩专区| 日本一区福利在线| 中文字幕视频精品一区二区三区| 天堂√中文最新版在线| 91欧美日韩| 久久在线免费| 狠狠爱www人成狠狠爱综合网| 伊人成人网在线看| 一级欧美视频| 中文一区在线| 久久国产精品免费精品3p | 麻豆理论在线观看| 91精品精品| 亚洲视频二区| 美女视频黄免费的久久| 久久永久免费| 日韩免费久久| 久久福利毛片| 欧美视频精品全部免费观看| 国产成人精品亚洲线观看| 久久理论电影| 麻豆精品网站| 国产一区二区三区不卡av| 五月天激情综合网| 91av一区| 国产综合视频| 精品中文在线| 性欧美长视频| 天堂√中文最新版在线| 日本不卡的三区四区五区| 福利片在线一区二区| 亚洲视频二区| 欧美三区四区| 国产精品亚洲一区二区在线观看 | 日本在线成人| 精品久久99| 亚洲综合丁香| 久久中文字幕av一区二区不卡| 青青草国产精品亚洲专区无| 亚洲精品97| 国产欧洲在线| 国产精品网在线观看| 日本欧美在线看| 欧洲亚洲一区二区三区| 国产探花一区在线观看| 久久www成人_看片免费不卡| 伊人久久高清| 久久99高清| 美女视频网站久久| 欧美日一区二区三区在线观看国产免 | 美女精品一区二区| 中文字幕成人| 中文在线不卡| 亚洲免费激情| 日韩亚洲国产欧美| 精品一区免费| 亚洲一级网站| 国产综合亚洲精品一区二| 97欧美在线视频| 大香伊人久久精品一区二区| 麻豆91在线播放| 日韩av一区二区在线影视| 久久av一区| 亚洲精品少妇| 日韩欧美中文在线观看| 亚洲精品成人一区| 欧美日本二区| 欧美a一区二区| 老司机免费视频一区二区三区| 国产亚洲精品精品国产亚洲综合| 国产欧美日韩综合一区在线播放| 97精品资源在线观看| 精品午夜久久| 久久精品成人| 亚洲精品麻豆| 国产亚洲高清一区| 国产精品亚洲一区二区在线观看| 国产精品自拍区| 日韩理论视频| 亚洲午夜免费| 国产精品大片| 1024精品久久久久久久久| 三级在线观看一区二区| 国产视频网站一区二区三区| 国产一区二区三区久久 | 天堂av在线| 一区在线免费| 国产精品s色| 国语精品一区| 亚洲精品国产偷自在线观看| 中文字幕成人| 亚洲人成在线网站| 免费成人在线视频观看| 精品理论电影在线| 99国产精品| 欧美亚洲专区| 久久高清免费| 青青草伊人久久| 欧美va天堂在线| 青青草国产精品亚洲专区无| 999国产精品视频| 国产日韩一区| 天使萌一区二区三区免费观看| 亚洲免费毛片| av综合电影网站| 91成人在线网站| 不卡在线一区二区| 精品一区二区三区视频在线播放 | 久久精品一区二区三区中文字幕| 欧美一区二区三区高清视频| 国产欧美精品久久| 免费看精品久久片| 神马午夜久久| 69精品国产久热在线观看| 好看的亚洲午夜视频在线| 日本久久综合| 久久精品亚洲| 国产探花在线精品| 日韩欧美2区| 日韩专区在线视频| 亚洲国产成人精品女人| 亚洲v在线看| 午夜精品久久久久久久久久蜜桃| 国产精品天堂蜜av在线播放| 日韩av在线免费观看不卡| 天堂av在线一区| 亚洲专区视频| 日本伊人久久| 亚洲无线观看| 日韩中文字幕| 国产精品白浆| 美女视频黄久久| 精品少妇一区| 亚洲国产欧美日本视频| 亚洲黄色免费av| 一区二区小说| 免费成人在线视频观看| 日韩黄色在线观看| 国产精品成人3p一区二区三区| 精品日韩在线| 亚洲二区三区不卡| 亚洲欧美在线专区| 国产乱人伦丫前精品视频| 国产乱码精品一区二区三区亚洲人| 国产精品夜夜夜| 日韩免费高清| 免费观看日韩电影| 久久99免费视频| 色88888久久久久久影院| 成人午夜毛片| 中文久久精品| 欧美激情日韩| 91精品成人| 中文在线а√天堂| 免费国产自线拍一欧美视频| 一二三区精品| 91亚洲国产| 亚洲播播91| 久久免费大视频| **爰片久久毛片| 99久久精品网站| 日本视频在线一区| 99久久久久国产精品| 亚洲精品麻豆| 99国产精品免费视频观看| 91麻豆精品| 国产精品嫩草99av在线| 精品三级av在线导航| 日韩在线成人| 亚洲欧美日韩国产| 国产精品国产三级国产在线观看| 国产农村妇女精品一二区| 国产精品二区不卡| 亚洲资源在线| 亚州av乱码久久精品蜜桃| 国产精品久久久久久久久久妞妞| 激情丁香综合| 亚洲女同av| 精品中国亚洲| 国产精品传媒麻豆hd| 日韩国产一二三区| 亚洲一区国产一区| 久久国产精品成人免费观看的软件| 国产乱码精品一区二区亚洲| 天堂俺去俺来也www久久婷婷| 亚洲激情婷婷| 激情自拍一区| 激情欧美国产欧美| 国产91在线播放精品| 国产免费av国片精品草莓男男| 综合一区二区三区| 一级欧美视频| 亚洲精品福利| 国产一区一一区高清不卡| 亚洲在线一区| 99在线精品视频在线观看| 欧美在线资源| 免费国产亚洲视频| 亚洲欧美专区|