[android] AbstractAccountAuthenticator 에 대해 알아보자.
http://developer.android.com/reference/android/accounts/AbstractAccountAuthenticator.html
-
계정을 생성하기 위해서는 AbstractAccountAuthenticator 를 구현한 녀석을 가지고 있어야 한다.
또한 android.accounts.AccountAuthenticator action 을 처리하는 Service 도 구현해야 한다.
해당 service 에서는 Authenticator 의 getIBinder() 를 수행한 녀석을 IBinder 로 return 해주어야 한다.
-
AuthenticationService 는 다음과 같은 intent filter 와 metadata 를 가지고 있어야 한다.
<service name="..."> <intent-filter> <action android:name="android.accounts.AccountAuthenticator" /> </intent-filter> <meta-data android:name="android.accounts.AccountAuthenticator" android:resource="@xml/authenticator" /> </service>
meta-data 에서 참조하는 resource 는 다음과 같은 foramt 을 갖는다.
xml/authenticator.xml
<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android" android:accountType="com.cklee.test" android:icon="@drawable/icon" android:smallIcon="@drawable/smallIcon" android:label="@string/app_name" android:accountPreferences="@xml/account_preferences" />
accountType 은 Account class 의 type 에 매핑되는 녀석으로 unique 한 string 이어야 한다.
icon 은 설정의 계정에 나오는 아이콘이고, smallIcon 은 연락처앱에 표시되는 계정 아이콘이다.
accountPreference 는 다음과 같은 format 을 갖으며, 설정의 계정 항목에 나오는 내용을 표시한다.
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="@string/title_fmt" /> <PreferenceScreen android:key="key1" android:title="@string/key1_action" android:summary="@string/key1_summary"> <intent android:action="key1.ACTION" android:targetPackage="key1.package" android:targetClass="key1.class" /> </PreferenceScreen> </PreferenceScreen>
-
AbstractAccountAuthenticator 를 구현하는 방법은 아래와 같다.
Authenticator 에 전달되는 param 을 기반으로 Bundle 에 결과물을 담아서 return 한다.
Authenticator 가 전달되는 param 외에 정보가 더 필요하다면, Intent 를 통해 Activity 를 호출해 추가정보를 받을 수 있다. 이 때 Bundle 은 KEY_INTENT 를 통해 return 되어야 한다. Activity 가 result 를 돌려줄 때는 KEY_ACCOUNT_MANAGER_RESPONSE 에 AccountAuthenticatorResponse 를 전달해야 한다. onResult(Bundle) 이나 onError(int, String) 을 호출해야 한다.
Authenticator 가 동기적으로 어떤 요청을 수행할 수 없다면, null 을 return 하고, AccountManagerResponse 를 이용하여 요청 수행이 끝나면 전달할 수 있다.
-
request 처리를 위해서 AccountAuthenticatorActivity 를 사용하는 것이 권장된다.
-
abstract Bundle addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options) Bundle addAccountFromCredentials(AccountAuthenticatorResponse response, Account account, Bundle accountCredentials) abstract Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account, Bundle options) abstract Bundle editProperties(AccountAuthenticatorResponse response, String accountType) Bundle getAccountCredentialsForCloning(AccountAuthenticatorResponse response, Account account) Bundle getAccountRemovalAllowed(AccountAuthenticatorResponse response, Account account) abstract Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) abstract String getAuthTokenLabel(String authTokenType) final IBinder getIBinder() abstract Bundle hasFeatures(AccountAuthenticatorResponse response, Account account, String[] features) abstract Bundle updateCredentials(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options)
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] TextSwitcher ( from API level 1 ) (0) | 2017.07.09 |
---|---|
[android] Material Support Library (0) | 2017.07.08 |
[android] AlarmManager 를 통해 이미 alarm 이 등록되었는지 어떻게 알 수 있을까? (0) | 2017.06.14 |
[Java] nio vs. io ( 성능, 개념 ) (0) | 2017.06.13 |
[Java] nio vs io ( package level 에서의 개념, not 성능 ) (0) | 2017.06.11 |
댓글