【Android 进程保活】应用进程拉活 ( 账户同步拉活 | 账号添加 | 源码资源 )
文章目錄
- 一、 賬號(hào)添加
- 二、 代碼示例
- 1、 賬號(hào)添加工具類
- 2、 權(quán)限注冊(cè)
- 3、 在 Activity 中調(diào)用上述工具類
- 4、 運(yùn)行效果
- 三、 源碼資源
一、 賬號(hào)添加
在上一篇博客 【Android 進(jìn)程保活】應(yīng)用進(jìn)程拉活 ( 賬戶同步拉活 | 賬號(hào)服務(wù)注冊(cè) | 源碼資源 ) 介紹了應(yīng)用賬號(hào)服務(wù)注冊(cè) ;
本博客中進(jìn)行賬號(hào)添加 ;
賬號(hào)添加時(shí) , 首先要獲取 AccountManager , 通過(guò)如下代碼獲取 :
(AccountManager) context.getSystemService(Context.ACCOUNT_SERVICE)查詢應(yīng)用的賬戶類型中 , 是否有該賬戶 , 調(diào)用 accountManager.getAccounts() 方法獲取指定賬戶類型的賬戶 ,
// 需要使用 android.permission.GET_ACCOUNTS 權(quán)限Account[] accounts = accountManager.getAccounts();這里的賬戶類型在 account-authenticator 標(biāo)簽中的 android:accountType 屬性中定義的 , 如下示例 :
<account-authenticatorxmlns:android="http://schemas.android.com/apk/res/android"android:accountType="keep_progress_alive.account"android:icon="@mipmap/ic_launcher"android:label="@string/app_name" />調(diào)用 AccountManager 的 getAccounts() 函數(shù) , 需要用到 android.permission.GET_ACCOUNTS 權(quán)限 , 在 AndroidManifest.xml 中聲明該權(quán)限 ;
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="kim.hsl.keep_progress_alive"><uses-permissionandroid:name="android.permission.GET_ACCOUNTS"android:maxSdkVersion="22" /><application /> </manifest>如果獲取的賬戶數(shù)組不為空 , 說(shuō)明賬戶已經(jīng)存在 , 這里不再進(jìn)行處理 ;
如果獲取的賬戶數(shù)組為空 , 說(shuō)明賬戶還沒(méi)有添加 , 這里需要?jiǎng)?chuàng)建并添加賬戶 ;
創(chuàng)建賬戶 : 需要傳入賬戶名稱 , 以及賬戶類型 ;
//創(chuàng)建賬戶Account account = new Account("kim.hsl", ACCOUNT_TYPE);添加賬戶 : 需要設(shè)置創(chuàng)建的賬戶 , 賬戶對(duì)應(yīng)密碼 , 賬戶數(shù)據(jù) , 這里設(shè)置為空 ;
// 添加一個(gè)新賬戶accountManager.addAccountExplicitly(account, "123456", new Bundle());調(diào)用 AccountManager.addAccountExplicitly 需要使用 android.permission.AUTHENTICATE_ACCOUNTS 權(quán)限 , 需要在 AndroidManifest.xml 中聲明賬戶 ;
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="kim.hsl.keep_progress_alive"><uses-permissionandroid:name="android.permission.GET_ACCOUNTS"android:maxSdkVersion="22" /><uses-permissionandroid:name="android.permission.AUTHENTICATE_ACCOUNTS"android:maxSdkVersion="22" /><application /> </manifest>二、 代碼示例
1、 賬號(hào)添加工具類
賬號(hào)添加工具類 :
package kim.hsl.keep_progress_alive.account_service;import android.accounts.Account; import android.accounts.AccountManager; import android.annotation.SuppressLint; import android.content.Context; import android.os.Bundle;public class AccountUtils {/*** 添加賬戶類型* 在 account-authenticator xml 標(biāo)簽中的 android:accountType 屬性中定義的*/public static final String ACCOUNT_TYPE = "keep_progress_alive.account";/*** 添加賬戶* @param context*/public static void addAccount (Context context){AccountManager accountManager = (AccountManager) context.getSystemService(Context.ACCOUNT_SERVICE);// 需要使用 android.permission.GET_ACCOUNTS 權(quán)限Account[] accounts = accountManager.getAccounts();// 該類型賬號(hào)不為空if (accounts.length > 0){// 賬戶已存在 , 不進(jìn)行處理}else{//創(chuàng)建賬戶Account account = new Account("kim.hsl", ACCOUNT_TYPE);// 添加一個(gè)新賬戶accountManager.addAccountExplicitly(account, "123456", new Bundle());}}}2、 權(quán)限注冊(cè)
需要注冊(cè)如下兩個(gè)權(quán)限 :
<uses-permissionandroid:name="android.permission.GET_ACCOUNTS"android:maxSdkVersion="22" /><uses-permissionandroid:name="android.permission.AUTHENTICATE_ACCOUNTS"android:maxSdkVersion="22" />完整清單文件示例 :
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="kim.hsl.keep_progress_alive"><uses-permission android:name="android.permission.FOREGROUND_SERVICE" /><uses-permissionandroid:name="android.permission.GET_ACCOUNTS"android:maxSdkVersion="22" /><uses-permissionandroid:name="android.permission.AUTHENTICATE_ACCOUNTS"android:maxSdkVersion="22" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.Keep_Progress_Alive"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><!--設(shè)置最近任務(wù)列表中不顯示該 Activity 組件 ( 不要被用戶察覺(jué) )android:excludeFromRecents="true"設(shè)置 Activity 親和性讓該界面在一個(gè)獨(dú)立的任務(wù)棧中 , 不要與本應(yīng)用的其它任務(wù)棧放在一起避免解除鎖屏后 , 關(guān)閉 1 像素界面 , 將整個(gè)任務(wù)棧都喚醒a(bǔ)ndroid:taskAffinity="kim.hsl.keep_progress_alive.alive"--><activityandroid:name=".one_pixel_activity.OnePixelActivity"android:excludeFromRecents="true"android:taskAffinity="kim.hsl.keep_progress_alive.onepixel"android:theme="@style/OnePixelActivityTheme" /><!-- 用于提權(quán)的前臺(tái)進(jìn)程 --><serviceandroid:name=".foreground_service.ForegroundService"android:enabled="true"android:exported="true" /><!-- 用于提權(quán)的前臺(tái)進(jìn)程, 關(guān)閉通知操作 --><serviceandroid:name=".foreground_service.CancelNotificationService"android:enabled="true"android:exported="true" /><!-- 系統(tǒng) Service 機(jī)制拉活 --><serviceandroid:name=".stick_service.StickService"android:enabled="true"android:exported="true" /><!-- 用于賬戶同步拉活 --><serviceandroid:name=".account_service.AuthenticationService"android:enabled="true"android:exported="true" ><intent-filter><action android:name="android.accounts.AccountAuthenticator"/></intent-filter><meta-dataandroid:name="android.accounts.AccountAuthenticator"android:resource="@xml/account_authenticator"/></service></application></manifest>3、 在 Activity 中調(diào)用上述工具類
package kim.hsl.keep_progress_alive;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent; import android.os.Bundle;import kim.hsl.keep_progress_alive.account_service.AccountUtils; import kim.hsl.keep_progress_alive.foreground_service.ForegroundService; import kim.hsl.keep_progress_alive.one_pixel_activity.KeepProgressAliveManager; import kim.hsl.keep_progress_alive.stick_service.StickService;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 1. 1 像素 Activity 提升應(yīng)用權(quán)限// 注冊(cè)廣播接收者 , 1 像素 Activity 啟動(dòng)的 廣播接收者//KeepProgressAliveManager.getmInstance().registerReceiver(this);// 2. 通過(guò)前臺(tái) Service 提升應(yīng)用權(quán)限// 啟動(dòng)普通 Service , 但是在該 Service 的 onCreate 方法中執(zhí)行了 startForeground// 變成了前臺(tái) Service 服務(wù)//startService(new Intent(this, ForegroundService.class));// 3. 使用 Service 機(jī)制拉活//startService(new Intent(this, StickService.class));// 4. 賬戶同步拉活AccountUtils.addAccount(this);}@Overrideprotected void onDestroy() {super.onDestroy();// 1. 取消注冊(cè)廣播接收者, 也可以不取消注冊(cè)//KeepProgressAliveManager.getmInstance().registerReceiver(this);} }
4、 運(yùn)行效果
程序運(yùn)行后 , 可以在 " 設(shè)置 -> 賬號(hào) " 中查看該賬號(hào)信息 ;
點(diǎn)擊去后的內(nèi)容 :
三、 源碼資源
源碼資源 :
- GitHub 地址 : https://github.com/han1202012/Keep_Progress_Alive
- CSDN 源碼快照 : https://download.csdn.net/download/han1202012/16604058
總結(jié)
以上是生活随笔為你收集整理的【Android 进程保活】应用进程拉活 ( 账户同步拉活 | 账号添加 | 源码资源 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Android 进程保活】应用进程拉活
- 下一篇: 【Android 进程保活】应用进程拉活