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

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

Android開發之AppWidget詳解

瀏覽:18日期: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久久,三上悠亚国产精品一区二区三区
蜜臀久久99精品久久久画质超高清| 婷婷精品进入| 亚洲美女91| 久久天堂精品| 国产一区国产二区国产三区| 一本综合精品| 在线综合欧美| 久久青草久久| 久久一区二区三区喷水| 国产第一亚洲| 国产精品第十页| 麻豆久久一区| 麻豆一区二区三| 男女精品网站| 国产一区导航| 石原莉奈在线亚洲二区| 中文字幕亚洲在线观看| 亚洲一二三区视频| 一区二区三区午夜视频| 亚洲另类视频| 亚洲精品激情| 国语对白精品一区二区| 尤物tv在线精品| 久久激情婷婷| 视频一区视频二区在线观看| 欧美一区二区三区久久精品| 久久久免费人体| 日韩不卡免费视频| 精品国产91| 亚洲国产影院| 日韩和欧美一区二区三区| 红杏一区二区三区| 久久久影院免费| 综合激情一区| 91日韩免费| 老司机精品久久| 蘑菇福利视频一区播放| 精品国产亚洲一区二区三区大结局| 久久精品国内一区二区三区| 久久蜜桃av| 日韩黄色在线观看| 色爱av综合网| 福利一区二区| 91精品国产自产观看在线| 日韩精品1区| 欧美日本不卡高清| 日韩午夜高潮| 老牛影视精品| 欧美日韩18| 免费精品视频| 欧美亚洲国产一区| 国产精品尤物| 日本在线高清| 美美哒免费高清在线观看视频一区二区| 国产精品66| 日韩精品导航| 日韩精品a在线观看91| 国产综合亚洲精品一区二| 精品亚洲a∨一区二区三区18| 日韩视频一二区| 性欧美长视频| 免费精品视频最新在线| 不卡一区综合视频| 日韩一区二区三区免费播放| 欧美精品三级在线| 日韩精品高清不卡| 奇米狠狠一区二区三区| 99在线精品视频在线观看| 国产另类在线| 欧美综合精品| 国产乱码精品一区二区三区四区 | 久久九九精品| 久久精品主播| 精品1区2区3区4区| 激情五月综合网| 九九99久久精品在免费线bt| 国产乱人伦精品一区| 日韩视频一二区| 国产精品美女午夜爽爽| 91欧美在线| 亚洲午夜天堂| 91日韩免费| 特黄特色欧美大片| 妖精视频成人观看www| 在线午夜精品| 日韩欧美一区二区三区在线观看 | 性色av一区二区怡红| 日韩在线一区二区| 欧美日韩亚洲一区| 69堂免费精品视频在线播放| 日本午夜精品| 精品一区二区三区中文字幕视频 | 一区二区国产在线观看| 亚洲成人精品| 日本欧美在线看| 久久不卡日韩美女| 欧美a级一区| 国产欧美日韩影院| 91看片一区| 亚洲精品第一| 久久男人av资源站| 日韩精品一级| 日韩久久精品| 日本中文字幕一区二区| 国产精品一区二区三区美女| 亚洲国产综合在线看不卡| 国产精品一区高清| 亚洲午夜久久久久久尤物| 国产亚洲永久域名| 久久字幕精品一区| 中文字幕av一区二区三区人| 午夜影院一区| 青草国产精品| 红桃视频国产精品| se01亚洲视频 | 美女久久精品| 免费观看日韩电影| 国产中文在线播放| 欧美专区一区| 一区二区三区四区在线观看国产日韩| 精品色999| 欧美激情亚洲| 日本不卡视频在线观看| 久久免费国产| 日韩中文视频| 亚洲成人不卡| 999久久久精品国产| 成人在线黄色| 日本vs亚洲vs韩国一区三区二区| 欧美女激情福利| 欧美日韩黑人| 黄色日韩在线| 色天使综合视频| 亚洲女同av| 精品三区视频| 老司机精品视频网| 国产精品亚洲一区二区在线观看| 亚洲字幕久久| 欧美日韩伊人| 亚洲精品少妇| 国产精品一区二区美女视频免费看 | 欧美成人午夜| 婷婷丁香综合| 精品日韩视频| 久久久久久自在自线| 久久精品人人| 久久精品亚洲人成影院| 国产66精品| 国产亚洲精品精品国产亚洲综合| 国产探花在线精品| 日产欧产美韩系列久久99| 蜜桃视频在线观看一区| 亚洲久久一区| 精品亚洲a∨| 久久亚洲美女| 最新亚洲激情| 亚洲日韩视频| 国产精品日本一区二区不卡视频| 欧美日韩一区自拍| 精品精品99| 国产精品日韩欧美一区| 亚洲最新av| 国产精品探花在线观看| 国产福利91精品一区二区| 精品国产乱码久久久久久1区2匹| 深夜福利视频一区二区| 亚洲专区欧美专区| 麻豆精品一区二区综合av| 精品欧美久久| 欧美一级一区| 日本黄色精品| 日韩亚洲精品在线| 亚洲精品四区| 国产精品v亚洲精品v日韩精品| 亚洲天堂资源| 国产91久久精品一区二区| 日本aⅴ亚洲精品中文乱码| 国产欧美日韩一区二区三区四区| 欧美日韩一区二区三区视频播放| 亚洲人成亚洲精品| 亚洲a在线视频| 日本成人手机在线| 激情亚洲影院在线观看| 日韩国产欧美在线播放| 人在线成免费视频| 综合激情一区| 国产九一精品| 欧美精品激情| 国产精品中文字幕亚洲欧美| 99久久亚洲精品蜜臀| 国产一区精品福利| 伊人久久一区| 精品丝袜在线| 亚洲成av在线| 麻豆视频观看网址久久| 天堂va在线高清一区| 日韩欧美中文字幕电影 | 久久夜色精品| 老司机久久99久久精品播放免费| 亚洲精品1区|