Launcher의 Shortcut 작성 프로세스 요약

6741 단어 Launcher
이 문서는 Contacts의 Direct dial을 예로 들어 Launcher에서 shortcut을 만드는 프로세스를 분석합니다.
Direct dial은 AndroidManifest에 있습니다.xml(Contacts)에서는 다음과 같이 설명합니다.
        <activity-alias android:name="alias.DialShortcut"

            android:targetActivity=".activities.ContactSelectionActivity"

            android:label="@string/shortcutDialContact"

            android:icon="@mipmap/ic_launcher_shortcut_directdial"

            android:enabled="@*android:bool/config_voice_capable">

            <intent-filter>

                <action android:name="android.intent.action.CREATE_SHORTCUT" />

                <category android:name="android.intent.category.DEFAULT" />

                <category android:name="android.intent.category.CAR_MODE" />

            </intent-filter>

        </activity-alias>

이렇게 하면 Launcher의 WIDGETS 페이지에서 Direct dial(android.intent.action.CREATE SHORTCUT)을 찾을 수 있습니다.
Direct dial을 데스크톱으로 드래그하면 터치합니다.activities.ContactSelectionActivity.연락처를 선택하면 Direct dial 생성이 완료됩니다.
이 shortcut을 누르면 우리가 선택한 연락처 전화 인터페이스로 이동합니다.
다음은 제가 걸었던 Log입니다. 중요한 절차가 모두 빨갛게 표시되었습니다.
-----------launcher widget 페이지에서 direct dial(shortcut)을 선택하고 launcher 메인 인터페이스로 드래그---------------
DragController-->onTouchEvent()-->MotionEvent.ACTION_UP, try to do drop() 
DragController-->drop() 
Workspace-->onDrop() 
Workspace-->onDropExternal() 
Launcher-->processShortcutFromDrop()-->componentName: com.android.contacts/alias.DialShortcut
Launcher-->resetAddInfo() 
Launcher-->processShortcut() 
Launcher-->startActivityForResultSafely()-->requestCode : 1 
DragLayer-->clearAnimatedView() 
ContactSelectionActivity-->onCreate()--start 
ContactSelectionActivity-->onCreate()-->mActionCode : -1 
ContactSelectionActivity-->configureListFragment()-->mActionCOde : 120 
ContactSelectionActivity-->onCreate()--end 
Launcher-->updateRunning() 
--------------------------새로 만든direct dial 바로 가기에 대한 연락처를 선택합니다. ----------------------
PhoneNumberPickerFragment-->onItemClick()-->position : 0, id : 1 
PhoneNumberPickerFragment-->pickPhoneNumber()-->uri : content://com.android.contacts/data/1 
ShortcutIntentBuilder-->createPhoneNumberShortcutIntent()-->uri : content://com.android.contacts/data/1, shortcutAction : android.intent.action.CALL 
ShortcutIntentBuilder-->PhoneNumberLoadingAsyncTask-->loadData()-->mDisplayName : gaojx, mPhotoId : 0, mPhoneNumber : 155 2487, mPhoneType : 2, mPhoneLabel : null 
ShortcutIntentBuilder-->PhoneNumberLoadingAsyncTask-->onPostExecute() 
ShortcutIntentBuilder-->createPhoneNumberShortcutIntent() 
PhoneNumberPickerFragment-->onShortcutIntentCreated() 
ContactSelectionActivity-->PhoneNumberPickerActionListener-->onShortcutIntentCreated() 
ContactSelectionActivity-->returnPickerResult()
Launcher-->onActivityResult()-->requestCode : 1, resultCode : -1
Launcher-->onActivityResult()-->resultCode == RESULT_OK && mPendingAddInfo.container != ItemInfo.NO_ID 
Launcher-->completeAdd()-->args.requestCode : 1
Launcher-->completeAddShortcut()-->container : -100, screen : 2, cellX : 1, cellY : 2 
Launcher-->createShortcut()-->start 
BubleTextView-->applyFromShortcutInfo()-->info.title : gaojx 
Launcher-->createShortcut()-->end 
Workspace-->createUserFolderIfNecessary() 
Workspace-->addToExistingFolderIfNecessary() 
LauncherModel-->addItemToDatabase() 
Workspace-->addInScreen() 
Launcher-->resetAddInfo() 
DragLayer-->clearAnimatedView() 
Launcher-->exitSpringLoadedDragModeDelayed()-->successfulDrop : true 
Launcher-->updateRunning() 
Launcher-->showWorkspace() 
Launcher-->showWorkspace()-->mState != State.WORKSPACE 
Launcher-->updateRunning() 
------------------------launcher 메인 인터페이스에 새로 만든direct dial-------------------------------------------------------
Launcher-->onClick() 
Launcher-->onClick()-->tag instanceof ShortcutInfo
Launcher-->startActivitySafely() 
Launcher-->startActivity()-->Action => android.intent.action.CALL, Data => tel:155%202487
OutgoingCallBroadcaster-->onCreate() 
OutgoingCallBroadcaster-->processIntent()-->intent=Intent { act=android.intent.action.CALL dat=tel:xxxxxxxxxxxxx flg=0x14800000 cmp=com.android.phone/.OutgoingCallBroadcaster bnds=[120,387][240,543] } 
Launcher-->updateRunning()
....................................................................................................
위의 로그를 통해 알 수 있듯이 shortcut의 절차는 다음과 같습니다.
1: 선언할 때 지정한 targetActivity 속성은 Launcher가 shortcut을 만들 때 사용합니다.Launcher의 startActivityForResultSafely가 설정한 targetActivity를 시작하여 이 shortcut에 대응하는 연락처를 선택하도록 합니다.
2. 연락처를 선택한 후 Launcher의 onActivity Result () 를 호출하여 shortcut 생성 작업을 완성합니다.
3. shortcut을 눌렀을 때 Launcher의 onClick 함수를 호출하여 클릭 이벤트를 처리하고, 최종적으로 Launcher의 startActivity Safely 함수를 통해 startActivity 함수를 호출합니다. (매개 변수 intent는 onActivity Result () 에서 얻은 것입니다.) 이 shortcutcut의 사명을 완성합니다.

좋은 웹페이지 즐겨찾기