最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

android Launcher AppWidget添加步驟介紹

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

一、AppWidget開機啟動加載

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

第一、注冊有關軟件包安裝、刪除、改變的廣播,以便我們可以更新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);
第二、當鎖定狀態(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);
第三、暫?;蚪獬龝和脧V播;
        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三個類的關系

    mAppWidgetManager = AppWidgetManagerCompat.getInstance(this);

    mAppWidgetHost = new LauncherAppWidgetHost(this);
    // Host啟動監(jiān)聽,監(jiān)聽LauncherProvider中的數(shù)據改變
    mAppWidgetHost.startListening();
    ...
}
1、初始化AppWidgetHostd對象,創(chuàng)建用于回調的Callbacks服務類IAppWidgetHost.Stub, 綁定服務bindService,得到IAppWidgetService對象,進行l(wèi)auncher和AppWidgetService之間的調用
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)服務成員變量中,
3、當添加AppWidget時,首頁返回到Launcher中的onActivityResult中,在handleActivityResult中
        addAppWidgetImpl(
                        appWidgetId, requestArgs, null,
                        requestArgs.getWidgetHandler(),
                        ON_ACTIVITY_RESULT_ANIMATION_DELAY);
創(chuàng)建添加小部件意圖,之后返回到onActivityForResult,調用completeAddAppWidget,通過IAppWidgetService.getAppWidgetInfo,獲取AppWidgetProviderInfo,保存到本地數(shù)據庫中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;
    }
調用AppWidgetHostView.updateAppWidget(views);更新View到launcher界面上mWorkspace.addInScreen(hostView, launcherInfo);

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

總結

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

相關文章

  • 使用Flutter開發(fā)一個圖片UI組件的代碼示例

    使用Flutter開發(fā)一個圖片UI組件的代碼示例

    在移動應用開發(fā)中,圖片展示是一個常見的需求,為了滿足不同場景的圖片展示需求,我們可以開發(fā)一個靈活配置的圖片UI組件,本文將介紹如何使用Flutter開發(fā)一個圖片UI組件,并提供了豐富的配置選項,需要的朋友可以參考下
    2023-09-09
  • Android開發(fā)服務Service全面講解

    Android開發(fā)服務Service全面講解

    Android的服務是開發(fā)Android應用程序的重要組成部分。不同于活動Activity,服務是在后臺運行,服務沒有接口,生命周期也與活動Activity非常不同。通過使用服務我們可以實現(xiàn)一些后臺操作,比如想從遠程服務器加載一個網頁等,下面來看看詳細內容,需要的朋友可以參考下
    2023-02-02
  • Android實現(xiàn)環(huán)形進度條代碼

    Android實現(xiàn)環(huán)形進度條代碼

    這篇文章主要為大家詳細介紹了Android實現(xiàn)環(huán)形進度條的代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android選擇與上傳圖片之PictureSelector教程

    Android選擇與上傳圖片之PictureSelector教程

    這篇文章主要介紹了在Android中對于圖片的選擇與上傳方法,本文介紹了PictureSelector的相關使用教程,學習Android的同學進來看看吧
    2021-08-08
  • Android入門之ViewFlipper翻轉視圖的使用詳解

    Android入門之ViewFlipper翻轉視圖的使用詳解

    本篇給大家?guī)Я说氖荲iewFlipper,它是Android自帶的一個多頁面管理控件,且可以自動播放!本篇我們我們會使用兩個例子:一個自動播放首頁輪播頁一個手動可左右滑動道頁的輪播頁來說透這個組件的使用,感興趣的可以了解一下
    2022-11-11
  • Kotlin編寫Android適配器Adapter

    Kotlin編寫Android適配器Adapter

    這篇文章主要為大家詳細介紹了Kotlin編寫Android適配器Adapter的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Android Studio Kotlin代碼和java代碼相互轉化實例

    Android Studio Kotlin代碼和java代碼相互轉化實例

    這篇文章主要介紹了Android Studio Kotlin代碼和java代碼相互轉化實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 一文徹底了解Android中的線程和線程池

    一文徹底了解Android中的線程和線程池

    眾所周知線程池能很高地提升程序的性能,下面這篇文章主要給大家介紹了關于Android中線程和線程池的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • android 為應用程序創(chuàng)建桌面快捷方式技巧分享

    android 為應用程序創(chuàng)建桌面快捷方式技巧分享

    手機裝的軟件過多,找起來很不方便,所以在主頁面有一個快捷方式的話會很不錯的,本文將介紹如何實現(xiàn),需要了解跟多的朋友可以參考下
    2012-12-12
  • Android Studio 3.5版本JNI生成SO文件詳解

    Android Studio 3.5版本JNI生成SO文件詳解

    這篇文章主要介紹了Android Studio 3.5版本JNI生成SO文件詳解,想了解JNI的同學,可以參考下
    2021-04-04

最新評論

鄂托克旗| 酉阳| 罗平县| 漾濞| 绍兴市| 田东县| 长顺县| 安康市| 赞皇县| 托里县| 景谷| 扶风县| 渭源县| 晋宁县| 扶余县| 延庆县| 嵊州市| 永和县| 镇巴县| 遵化市| 南充市| 长沙市| 阜城县| 专栏| 嘉义县| 通海县| 余姚市| 凤山市| 江北区| 常山县| 乌兰察布市| 寻甸| 平邑县| 历史| 茂名市| 朝阳市| 吴川市| 乐亭县| 无棣县| 裕民县| 古田县|