欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

android Launcher AppWidget添加步驟介紹

 更新時間:2022年01月07日 10:44:12   作者:空間維度  
大家好,本篇文章主要講的是android Launcher AppWidget添加步驟介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽

一、AppWidget開機啟動加載

Android系統(tǒng)啟動,SystemServer創(chuàng)建AppWidgetService,并調(diào)用AppWidgetServiceImpl.onStart()方法,初始化相關(guān)管理器,注冊四個廣播接收器:

第一、注冊有關(guān)軟件包安裝、刪除、改變的廣播,以便我們可以更新provider列表。;

        // Register for broadcasts about package install, etc., so we can
        // update the provider list.
        IntentFilter packageFilter = new IntentFilter();
        packageFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
        packageFilter.addAction(Intent.ACTION_PACKAGE_CHANGED);
        packageFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
        packageFilter.addDataScheme("package");
        mContext.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL,
                packageFilter, null, null);
第二、當(dāng)鎖定狀態(tài)發(fā)生變化時會播放一些事件:
        IntentFilter offModeFilter = new IntentFilter();
        offModeFilter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE);
        offModeFilter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE);
        mContext.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL,
                offModeFilter, null, null);
第三、暫?;蚪獬龝和?yīng)用廣播;
        IntentFilter offModeFilter = new IntentFilter();
        offModeFilter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE);
        offModeFilter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE);
        mContext.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL,
                offModeFilter, null, null);
第四、注冊sdcard的安裝與卸載的廣播。
        // Register for events related to sdcard installation.
        IntentFilter sdFilter = new IntentFilter();
        sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
        sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);
        mContext.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL,
                sdFilter, null, null);

二、Launcher3啟動添加

Launcher啟動onCreate()方法初始化mAppWidgetManager, mAppWidgetHost對象,AppWidgetHost是launcher承載AppWidgetView的宿主
mAppWidgetHost.startListening,通過

public void onCreate() {
    ...
    // 13      //得到AppWidget管理實例 : AppWidgetManager , AppWidgetHost , AppWidgetHostView三個類的關(guān)系

    mAppWidgetManager = AppWidgetManagerCompat.getInstance(this);

    mAppWidgetHost = new LauncherAppWidgetHost(this);
    // Host啟動監(jiān)聽,監(jiān)聽LauncherProvider中的數(shù)據(jù)改變
    mAppWidgetHost.startListening();
    ...
}
1、初始化AppWidgetHostd對象,創(chuàng)建用于回調(diào)的Callbacks服務(wù)類IAppWidgetHost.Stub, 綁定服務(wù)bindService,得到IAppWidgetService對象,進行l(wèi)auncher和AppWidgetService之間的調(diào)用
public AppWidgetHost(Context context, int hostId, InteractionHandler handler, Looper looper) {
        mContextOpPackageName = context.getOpPackageName();
        mHostId = hostId;
        mInteractionHandler = handler;
        mHandler = new UpdateHandler(looper);
        mCallbacks = new Callbacks(mHandler);
        mDisplayMetrics = context.getResources().getDisplayMetrics();
        bindService(context);
    }
2、在startListening 方法中 ,通過IAppWidgetService.startListening 方法解析Launcher中的AppWidget信息保存到系統(tǒng)服務(wù)成員變量中,
3、當(dāng)添加AppWidget時,首頁返回到Launcher中的onActivityResult中,在handleActivityResult中
        addAppWidgetImpl(
                        appWidgetId, requestArgs, null,
                        requestArgs.getWidgetHandler(),
                        ON_ACTIVITY_RESULT_ANIMATION_DELAY);
創(chuàng)建添加小部件意圖,之后返回到onActivityForResult,調(diào)用completeAddAppWidget,通過IAppWidgetService.getAppWidgetInfo,獲取AppWidgetProviderInfo,保存到本地數(shù)據(jù)庫中addItemToDatabase(),
 @Thunk void completeAddAppWidget(int appWidgetId, ItemInfo itemInfo,
1070            AppWidgetHostView hostView, LauncherAppWidgetProviderInfo appWidgetInfo) {
1071
1072        if (appWidgetInfo == null) {
1073            appWidgetInfo = mAppWidgetManager.getLauncherAppWidgetInfo(appWidgetId);
1074        }
1075
1076        LauncherAppWidgetInfo launcherInfo;
1077        launcherInfo = new LauncherAppWidgetInfo(appWidgetId, appWidgetInfo.provider);
1078        launcherInfo.spanX = itemInfo.spanX;
1079        launcherInfo.spanY = itemInfo.spanY;
1080        launcherInfo.minSpanX = itemInfo.minSpanX;
1081        launcherInfo.minSpanY = itemInfo.minSpanY;
1082        launcherInfo.user = appWidgetInfo.getProfile();
1083
1084        getModelWriter().addItemToDatabase(launcherInfo,
1085                itemInfo.container, itemInfo.screenId, itemInfo.cellX, itemInfo.cellY);
1086
1087        if (hostView == null) {
1088            // Perform actual inflation because we're live
1089            hostView = mAppWidgetHost.createView(this, appWidgetId, appWidgetInfo);
1090        }
1091        hostView.setVisibility(View.VISIBLE);
1092        prepareAppWidget(hostView, launcherInfo);
1093        mWorkspace.addInScreen(hostView, launcherInfo);
1094    }
1095
1096    private void prepareAppWidget(AppWidgetHostView hostView, LauncherAppWidgetInfo item) {
1097        hostView.setTag(item);
// 計算AppWidget的顯示大小位置
1098        item.onBindAppWidget(this, hostView);
1099        hostView.setFocusable(true);
1100        hostView.setOnFocusChangeListener(mFocusHandler);
1101    }
并創(chuàng)建AppWidgetHostView 對象,mAppWidgetHost.createView,返回RemoteView對象,IAppWidgetService。getAppWidgetViews()
public final AppWidgetHostView createView(Context context, int appWidgetId,
            AppWidgetProviderInfo appWidget) {
        if (sService == null) {
            return null;
        }
        AppWidgetHostView view = onCreateView(context, appWidgetId, appWidget);
        view.setInteractionHandler(mInteractionHandler);
        view.setAppWidget(appWidgetId, appWidget);
        synchronized (mViews) {
            mViews.put(appWidgetId, view);
        }
        RemoteViews views;
        try {
            views = sService.getAppWidgetViews(mContextOpPackageName, appWidgetId);
        } catch (RemoteException e) {
            throw new RuntimeException("system server dead?", e);
        }
        view.updateAppWidget(views);

        return view;
    }
調(diào)用AppWidgetHostView.updateAppWidget(views);更新View到launcher界面上mWorkspace.addInScreen(hostView, launcherInfo);

當(dāng)AppWidgetProvider獲得更新的廣播,并執(zhí)行onUpdate(),onUpdate()中創(chuàng)建了RemoteViews并通過AppWidgetManager.updateAppWidget()更新到AppWidgetService之后,AppWidgetService會通過注冊的IAppWidgetHost的回調(diào),執(zhí)行AppWidgetHost的更新。

總結(jié)

到此這篇關(guān)于android Launcher AppWidget添加步驟介紹的文章就介紹到這了,更多相關(guān)android Launcher AppWidget內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android動畫之3D翻轉(zhuǎn)效果實現(xiàn)函數(shù)分析

    Android動畫之3D翻轉(zhuǎn)效果實現(xiàn)函數(shù)分析

    Android中的翻轉(zhuǎn)動畫效果的實現(xiàn),Android中并沒有提供直接做3D翻轉(zhuǎn)的動畫,所以關(guān)于3D翻轉(zhuǎn)的動畫效果需要我們自己實現(xiàn),那么我們首先來分析一下Animation 和 Transformation,感興趣的朋友可以了解下啊
    2013-01-01
  • Android 實現(xiàn)自定義圓形進度條的功能

    Android 實現(xiàn)自定義圓形進度條的功能

    這篇文章主要介紹了Android 實現(xiàn)自定義圓形進度條的功能的相關(guān)資料,開發(fā)Android應(yīng)用的朋友肯定對自定義View不陌生,很多都有重新寫的,這里就對實現(xiàn)圓形進度條介紹下,需要的朋友可以參考下
    2016-11-11
  • android JSON解析數(shù)據(jù) android解析天氣預(yù)報

    android JSON解析數(shù)據(jù) android解析天氣預(yù)報

    這篇文章主要為大家詳細(xì)介紹了android JSON解析數(shù)據(jù),android天氣預(yù)報JSON數(shù)據(jù)解析,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • PopupWindow?RecyclerView實現(xiàn)下拉選擇Spinner示例解析

    PopupWindow?RecyclerView實現(xiàn)下拉選擇Spinner示例解析

    這篇文章主要介紹了PopupWindow?RecyclerView實現(xiàn)下拉選擇Spinner示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • 移動端開發(fā)之Jetpack?Hilt技術(shù)實現(xiàn)解耦

    移動端開發(fā)之Jetpack?Hilt技術(shù)實現(xiàn)解耦

    Hilt的出現(xiàn)解決前兩點問題,因為Hilt是Dagger針對Android平臺的場景化框架,比如Dagger需要我們手動聲明注入的地方,而Android聲明的地方不都在onCreate()嗎,所以Hilt就幫我們做了,除此之外還做了很多事情
    2023-02-02
  • Flutter常用的布局和事件示例詳解

    Flutter常用的布局和事件示例詳解

    這篇文章主要給大家介紹了關(guān)于Flutter常用的布局和事件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Flutter具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Android應(yīng)用接入微信分享的實例代碼

    Android應(yīng)用接入微信分享的實例代碼

    本篇文章主要介紹了Android應(yīng)用接入微信分享的實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-07-07
  • Android實現(xiàn)簡易的柱狀圖和曲線圖表實例代碼

    Android實現(xiàn)簡易的柱狀圖和曲線圖表實例代碼

    柱狀圖是統(tǒng)計圖表中經(jīng)常用到的一種圖表,比如降雨量之類的統(tǒng)計展示。這篇文章主要給大家介紹了關(guān)于利用Android如何實現(xiàn)簡易的柱狀圖和曲線圖表的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-12-12
  • Android App開發(fā)的自動化測試框架UI Automator使用教程

    Android App開發(fā)的自動化測試框架UI Automator使用教程

    UI Automator為Android程序的UI開發(fā)提供了測試環(huán)境,這里我們就來看一下Android App開發(fā)的自動化測試框架UI Automator使用教程,需要的朋友可以參考下
    2016-07-07
  • Android使用AndroidUtilCode實現(xiàn)多語言

    Android使用AndroidUtilCode實現(xiàn)多語言

    這篇文章主要為大家介紹了Android使用AndroidUtilCode實現(xiàn)多語言示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01

最新評論