Launcher의 Shortcut 작성 프로세스 요약
6741 단어 Launcher
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의 사명을 완성합니다.