【Android 进程保活】应用进程拉活 ( 账户同步拉活 | 账号添加 | 源码资源 )
文章目录
- 一、 账号添加
- 二、 代码示例
- 1、 账号添加工具类
- 2、 权限注册
- 3、 在 Activity 中调用上述工具类
- 4、 运行效果
- 三、 源码资源
一、 账号添加
在上一篇博客 【Android 进程保活】应用进程拉活 ( 账户同步拉活 | 账号服务注册 | 源码资源 ) 介绍了应用账号服务注册 ;
本博客中进行账号添加 ;
账号添加时 , 首先要获取 AccountManager , 通过如下代码获取 :
(AccountManager) context.getSystemService(Context.ACCOUNT_SERVICE)
查询应用的账户类型中 , 是否有该账户 , 调用 accountManager.getAccounts() 方法获取指定账户类型的账户 ,
// 需要使用 android.permission.GET_ACCOUNTS 权限Account[] accounts = accountManager.getAccounts();
这里的账户类型在 account-authenticator 标签中的 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" />
调用 AccountManager 的 getAccounts() 函数 , 需要用到 android.permission.GET_ACCOUNTS 权限 , 在 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" /><application />
</manifest>
如果获取的账户数组不为空 , 说明账户已经存在 , 这里不再进行处理 ;
如果获取的账户数组为空 , 说明账户还没有添加 , 这里需要创建并添加账户 ;
创建账户 : 需要传入账户名称 , 以及账户类型 ;
//创建账户Account account = new Account("kim.hsl", ACCOUNT_TYPE);
添加账户 : 需要设置创建的账户 , 账户对应密码 , 账户数据 , 这里设置为空 ;
// 添加一个新账户accountManager.addAccountExplicitly(account, "123456", new Bundle());
调用 AccountManager.addAccountExplicitly 需要使用 android.permission.AUTHENTICATE_ACCOUNTS 权限 , 需要在 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、 账号添加工具类
账号添加工具类 :
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 标签中的 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 权限Account[] accounts = accountManager.getAccounts();// 该类型账号不为空if (accounts.length > 0){// 账户已存在 , 不进行处理}else{//创建账户Account account = new Account("kim.hsl", ACCOUNT_TYPE);// 添加一个新账户accountManager.addAccountExplicitly(account, "123456", new Bundle());}}}
2、 权限注册
需要注册如下两个权限 :
<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><!--设置最近任务列表中不显示该 Activity 组件 ( 不要被用户察觉 )android:excludeFromRecents="true"设置 Activity 亲和性让该界面在一个独立的任务栈中 , 不要与本应用的其它任务栈放在一起避免解除锁屏后 , 关闭 1 像素界面 , 将整个任务栈都唤醒android: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" /><!-- 用于提权的前台进程 --><serviceandroid:name=".foreground_service.ForegroundService"android:enabled="true"android:exported="true" /><!-- 用于提权的前台进程, 关闭通知操作 --><serviceandroid:name=".foreground_service.CancelNotificationService"android:enabled="true"android:exported="true" /><!-- 系统 Service 机制拉活 --><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 中调用上述工具类
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 提升应用权限// 注册广播接收者 , 1 像素 Activity 启动的 广播接收者//KeepProgressAliveManager.getmInstance().registerReceiver(this);// 2. 通过前台 Service 提升应用权限// 启动普通 Service , 但是在该 Service 的 onCreate 方法中执行了 startForeground// 变成了前台 Service 服务//startService(new Intent(this, ForegroundService.class));// 3. 使用 Service 机制拉活//startService(new Intent(this, StickService.class));// 4. 账户同步拉活AccountUtils.addAccount(this);}@Overrideprotected void onDestroy() {super.onDestroy();// 1. 取消注册广播接收者, 也可以不取消注册//KeepProgressAliveManager.getmInstance().registerReceiver(this);}
}
4、 运行效果
程序运行后 , 可以在 " 设置 -> 账号 " 中查看该账号信息 ;
点击去后的内容 :
三、 源码资源
源码资源 :
- GitHub 地址 : https://github.com/han1202012/Keep_Progress_Alive
- CSDN 源码快照 : https://download.csdn.net/download/han1202012/16604058
【Android 进程保活】应用进程拉活 ( 账户同步拉活 | 账号添加 | 源码资源 )相关推荐
- Android进程保活的一般套路
自己曾经也在这个问题上伤过脑经,前几日刚好有一个北京的哥们在QQ说在做IM类的项目,问我进程保活如何处理比较恰当,决定去总结一下,网上搜索一下进程常驻的方案好多好多,但是很多的方案都是不靠谱的或者不是 ...
- Android进程保活方案
自己曾经也在这个问题上伤过脑经,前几日刚好有一个北京的哥们在QQ说在做IM类的项目,问我进程保活如何处理比较恰当,决定去总结一下,网上搜索一下进程常驻的方案好多好多,但是很多的方案都是不靠谱的或者不是 ...
- Android进程保活方案的几种方案
自己曾经也在这个问题上伤过脑经,前几日刚好有一个北京的哥们在QQ说在做IM类的项目,问我进程保活如何处理比较恰当,决定去总结一下,网上搜索一下进程常驻的方案好多好多,但是很多的方案都是不靠谱的或者不是 ...
- 【Android 进程保活】应用进程拉活 ( 双进程守护保活 )
文章目录 一. 双进程守护保活原理 二. 双进程守护保活完整源码 1.AIDL 接口 2.本地前台服务 Service 3.远程前台服务 Service 4.清单配置 5.启动两个服务 5.执行效果 ...
- 【Android 进程保活】应用进程拉活 ( 双进程守护 + JobScheduler 保活 | 成功率最高 | 推荐使用 )
文章目录 一. 双进程守护保活 + JobScheduler 原理 二. 双进程守护保活 + JobScheduler 源码 1.JobService 代码 2.判定服务运行工具类 3.清单文件 4. ...
- 【Android 进程保活】应用进程拉活 ( JobScheduler 拉活 | JobScheduler 使用流程 | JobService 服务 | 不同版本兼容 | 源码资源 )
文章目录 一. JobScheduler 用法简介 二. JobScheduler 拉活完整代码 1. JobService 2.清单文件 3.启动 JobScheduler 任务 4.运行效果 三. ...
- 【Android 进程保活】应用进程拉活 ( 系统 Service 机制拉活 | Service 组件 onStartCommand 方法分析 | 源码资源 )
文章目录 一. Service 组件 onStartCommand 方法分析 1. onStartCommand 函数返回值分析 2. onStartCommand 函数 START_STICKY_C ...
- Android进程保活、拉活方案
引言 最近产品提出了一个非常BT的需求,说我们所做的APP要做到像微信和QQ那种即时用户清理了进程还是能收到消息的效果,当时心中就卧槽了一顿,虽然心里一万只曹尼玛翻滚着,但是功能还是要做啊,因为生活还 ...
- Android进程保活拉活
参考:腾讯视频相关视频公开课 学习资料: 探讨Android6.0及以上系统APP常驻内存(保活)实现-争宠篇 目录 一.进程的一些基本常识 二.如何保活 三.如何拉活 四.总结 一.进程的一些基本常 ...
最新文章
- JVM结构、内存分配、垃圾回收算法、垃圾收集器。
- 静态路由与配置 知识点
- pytorch教程龙曲良11-15
- zblog php 标题优化,Zblog分类页标题重复的优化 - 张力博客
- 正月初六 | 2月17日 星期二 | 快手体育拿下斯诺克赛事版权;华为推出“智慧养猪”方案;春节档总票房突破60亿元...
- 一切事物皆对象_基础篇
- 百度地图label样式修正
- leetcode-22-括号生成
- 自定义rest api的基本思想过程--总结
- 深圳立仪发布纳米级高分辨率光谱共焦位移传感器,精度再破纪录
- 计算机专业正高职称怎么获得,正高级软件工程师职称认定办理
- Backtrader量化回测8——手续费
- Xilinx FPGA等效门数计算
- 元宇宙、区块链和潘家园
- 时序动作定位 | I3D(Inflated 3D ConvNet) 与 UNT(UntrimmedNets) 特征模型
- 计算机英语输入法怎么,电脑英文输入法不见了怎么处理?
- 自动柜员机是不是微型计算机,微型计算机基础知识.pptx
- 天池o2o优惠券使用预测(入门)
- python 全自动化爬取必应图片
- c4d用python能做出啥动画_C4D治愈系动画,到底如何实现?