一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

一步一步教你在 Android 里創(chuàng)建自己的賬號系統(tǒng)(一)

 jnstyle 2016-07-05

大家在平時使用 Android 手機(jī)的時候,都會發(fā)現(xiàn)有些應(yīng)用(例如 qq,微信,淘寶)為自己創(chuàng)建了賬號系統(tǒng),并且能夠在設(shè)置頁面看到他,可是當(dāng)自己希望為自己的軟件寫一個賬號系統(tǒng)的時候總是不知從何入手,現(xiàn)在我們就從頭開始,一步一步打造屬于自己應(yīng)用的賬號系統(tǒng)。

 

在進(jìn)行設(shè)備賬戶管理的時候,我們會通過一個 AccountManager 類獲取系統(tǒng)的賬戶管理類,獲取的方法如下:

 

1
AccountManager mAccountManager = (AccountManager) getSystemService(ACCOUNT_SERVICE);

或者

 

1
AccountManager accountManager = AccountManager.get(context);

接下來我們需要通過 AccountManager 對象對賬號系統(tǒng)進(jìn)行操作。

 

 

1.獲取賬戶信息

首先我們來查看一下如何獲取用戶已有的賬戶信息,如果你希望讀取系統(tǒng)當(dāng)前的賬戶信息,那么你首先需要在 manifest 文件中申明一個讀取賬戶的權(quán)限,如下:

 

1
<uses-permission android:name="android.permission.GET_ACCOUNTS/"></uses-permission>

 

(1)獲取所有賬戶信息

如果你希望獲取到當(dāng)前設(shè)備所有的賬戶信息,你可以使用:

 

1
accountManager.getAccounts();

 

(2)獲取特定的賬戶信息

如果你只希望獲取自己或者特定的賬戶信息,你就應(yīng)該使用:

 

1
accountManager.getAccountsByType(com.kifile);

 

后面的參數(shù)是你自己定義的賬戶類型,怎么設(shè)置我會在接下來的文章中寫出來。

然后,我們就可以通過上面獲取到的工具類,讀取到手機(jī)上的賬戶信息了,這里我寫了一個 ListView 的 Adapter 用于展示當(dāng)前系統(tǒng)中的賬號信息:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class AccountAdapter extends BaseAdapter {
        private Account[] mAccounts;
        public AccountAdapter(Account[] accounts) {
            this.mAccounts = accounts;
        }
        @Override
        public int getCount() {
            return mAccounts != null mAccounts.length : 0;
        }
        @Override
        public Object getItem(int position) {
            return mAccounts[position];
        }
        @Override
        public long getItemId(int position) {
            return 0;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            TextView tv = new TextView(getBaseContext());
            tv.setText(mAccounts[position].name +   + mAccounts[position].type);
            return tv;
        }
    }

獲取當(dāng)前所有系統(tǒng)賬戶信息以及設(shè)置 ListView 的 Adapter 的方法如下:

 

 

1
mListView.setAdapter(new AccountAdapter(mAccountManager.getAccounts()));

顯示效果如下:

 

\

同你當(dāng)前設(shè)備進(jìn)行對比,你就會發(fā)現(xiàn)我們已經(jīng)將當(dāng)前所有的賬戶信息顯示了出來,同樣地如果你只希望顯示部分的賬戶信息,你就可以通過 getAccountByType 獲取對應(yīng)的賬戶列表。

2.建立自己的賬號服務(wù)

通過上面的部分,我們已經(jīng)知道了如何獲取 Android 本身現(xiàn)有的賬號信息,現(xiàn)在我們就開始著手建立屬于自己的賬號系統(tǒng)吧。

你需要知道的是,如果你希望建立自己的賬號系統(tǒng),那么你得在 manifest 文件中聲明一個關(guān)于賬號的Service,如下

 

1
2
3
4
5
6
<service android:enabled="true" android:exported="true" android:name="com.kifile.account.app.account.AccountService">
            <intent-filter>
                 
            </action></intent-filter>
            <meta-data android:name="android.accounts.AccountAuthenticator" android:resource="@xml/authenticator/">
        </meta-data></service>

在上面的代碼中,我們通過設(shè)置 intent-filter 告知系統(tǒng),我們當(dāng)前應(yīng)用中有一個賬號服務(wù),至于具體的賬號信息則放在 meta-data 中的 android:resource 文件中提供, 該文件為authenticator.xml,放置路徑為 res/xml,內(nèi)容如下:

 

 

1
2
<!--?xml version=1.0 encoding=utf-8-->
</account-authenticator>

在這里,我們就可以向系統(tǒng)提供相關(guān)的賬戶信息,用于在 Android Setting 目錄下顯示對應(yīng)的賬號信息。例如這里,我們就定義了當(dāng)前的賬戶類型為com.kifile,在賬戶系統(tǒng)中顯示的標(biāo)簽為@string/app_name 對應(yīng)的 String 對象,顯示的 icon 為ic_launcher。

 

Ok,到了這里,我們已經(jīng)向系統(tǒng)聲明了一個賬戶相關(guān)的服務(wù),現(xiàn)在讓我們來具體實(shí)現(xiàn)他。

Android 為我們提供了一個叫做 AbstractAccountAuthenticator 的抽象類,也是通過它來實(shí)現(xiàn):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public static class Authenticator extends AbstractAccountAuthenticator {
        public Authenticator(Context context) {
            super(context);
        }
        @Override
        public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) {
            return null;
        }
        @Override
        public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options) throws NetworkErrorException {
            return null;
        }
        @Override
        public Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account, Bundle options) throws NetworkErrorException {
            return null;
        }
        @Override
        public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) throws NetworkErrorException {
            return null;
        }
        @Override
        public String getAuthTokenLabel(String authTokenType) {
            return null;
        }
        @Override
        public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) throws NetworkErrorException {
            return null;
        }
        @Override
        public Bundle hasFeatures(AccountAuthenticatorResponse response, Account account, String[] features) throws NetworkErrorException {
            return null;
        }
    }
從上面的代碼中,我們可以看出,Android 需要從我們自定義的 Service 中獲取一個 AbstractAccountAuthenticator 對象,然后再調(diào)用對象中的方法來實(shí)現(xiàn)賬號系統(tǒng)的具體操作,每一個方法的意義,我們在本文中就不具體探討了,如果你有興趣,可以去看看 API 文檔。

 

當(dāng)我們創(chuàng)建好了一個AbstractAccountAuthenticator 類后,我們需要從 Service 中取得這個類的對象,代碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
private Authenticator authenticator;
    @Override
    public void onCreate() {
        super.onCreate();
        authenticator = new Authenticator(this);
    }
    @Override
    public IBinder onBind(Intent intent) {
        return authenticator.getIBinder();
    }
AccountService 類在 onCreate 的時候創(chuàng)建一個 Authenticator 對象,然后再 bindService 的時候,將 Authenticator 的 IBinder 傳遞回去,以供調(diào)用。

 

當(dāng)你完成上面的步驟之后,你就會發(fā)現(xiàn),在你的設(shè)置頁面點(diǎn)擊添加賬戶時就會出現(xiàn)你自定義的賬戶了,如下:

\

3.添加賬戶

雖然通過上面的步驟,我們已經(jīng)能夠在添加賬戶的界面看到屬于我們自己的賬戶類別了,但是你會發(fā)現(xiàn)當(dāng)你點(diǎn)擊它們的時候,沒有任何作用,那么我們應(yīng)該怎么在設(shè)備上完成添加賬戶的操作呢?

(1)加入添加賬戶的權(quán)限

添加賬戶也需要對應(yīng)的權(quán)限,你應(yīng)該在 manifest 文件中加入

 

1
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS/"></uses-permission>

 

(2)重寫 Authenticator 的 addAccount 方法

當(dāng)用戶在添加賬戶頁面選擇賬戶進(jìn)行添加或者調(diào)用accountManager.addAccount 的時候,系統(tǒng)會默認(rèn)調(diào)用 AbstractAccountAuthenticator 中的 addAccount 方法,因此你需要重寫 addAccount 方法,直接添加默認(rèn)賬戶,或者跳轉(zhuǎn)到某個頁面,讓用戶填寫用戶信息,然后添加賬戶。

(3)使用 addAccountExplicitly 直接添加賬戶

如果你希望直接添加賬戶信息,你可以使用以下方法:

 

1
2
Account account = new Account(Kifile,,,,12,com.kifile);
        accountManager.addAccountExplicitly(account,password,userdata);

使用之后,你就會發(fā)現(xiàn)在設(shè)置頁面出現(xiàn)你所建立的賬戶,點(diǎn)擊進(jìn)去,會發(fā)現(xiàn)賬戶名什么的也已經(jīng)成功設(shè)置:

 

\

 

本文暫時就到這里了,通過本文,你可以初步了解到 Android 的賬戶信息的建立流程,希望對大家有所幫助。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    人妻少妇av中文字幕乱码高清| 久久综合亚洲精品蜜桃| 国产性情片一区二区三区| 日韩国产亚洲欧美另类| 麻豆欧美精品国产综合久久| 好吊色免费在线观看视频| 国产伦精品一区二区三区精品视频| 国产一级精品色特级色国产| 高清国产日韩欧美熟女| 国产原创中文av在线播放| 国产亚洲视频香蕉一区| 成人精品一级特黄大片| 日韩不卡一区二区在线| 日韩日韩日韩日韩在线| 国产不卡一区二区四区| 欧美又黑又粗大又硬又爽| 日韩少妇人妻中文字幕| 欧美一区二区三区99| 丁香六月啪啪激情综合区| 日韩人妻毛片中文字幕| 欧美精品专区一区二区| av中文字幕一区二区三区在线| 又黄又硬又爽又色的视频| 日韩在线精品视频观看| 高清一区二区三区四区五区| 丰满人妻少妇精品一区二区三区| 日韩精品视频一二三区| 91在线播放在线播放观看| 国产一区国产二区在线视频| 久久精品久久久精品久久| 国产av天堂一区二区三区粉嫩| 丁香六月婷婷基地伊人| 国产精品欧美日韩中文字幕| 欧美国产精品区一区二区三区| 中文字幕不卡欧美在线| 欧美午夜国产在线观看| 欧美日韩在线观看自拍| 日韩美成人免费在线视频| 久久亚洲精品成人国产| 国产真人无遮挡免费视频一区| 日韩av欧美中文字幕|