日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

【Android 进程保活】应用进程拉活 ( 账户同步拉活 | 账号添加 | 源码资源 )

發(fā)布時(shí)間:2025/6/17 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 进程保活】应用进程拉活 ( 账户同步拉活 | 账号添加 | 源码资源 ) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、 賬號(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。