4、 sync-adapter 配置文件
<?xml version="1.0" encoding="utf-8"?> <sync-adapter xmlns:android="http://schemas.android.com/apk/res/android" android:accountType="keep_progress_alive.account" android:contentAuthority="kim.hsl.keep_progress_alive.provider" android:allowParallelSyncs="false" android:isAlwaysSyncable="true" android:userVisible="false"/>
5、 账户同步工具类
package kim.hsl.keep_progress_alive.account_service; import android.accounts.Account; import android.accounts.AccountManager; import android.annotation.SuppressLint; import android.content.ContentResolver; 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()); } } /** * 告知系统开始自动同步 */ public static void autoSyncStart(){ //创建账户 Account account = new Account("kim.hsl", ACCOUNT_TYPE); // 设置账户同步开启 // 注意 : 该操作需要权限 android.permission.WRITE_SYNC_SETTINGS ContentResolver.setIsSyncable(account, "kim.hsl.keep_progress_alive.provider", 1); // 设置账户自动同步 ContentResolver.setSyncAutomatically(account, "kim.hsl.keep_progress_alive.provider", true); // 设置账户同步周期 // 最后一个参数是同步周期 , 这个值只是参考值, 系统并不会严格按照该值执行 // 一般情况下同步的间隔 10 分钟 ~ 1 小时 ContentResolver.addPeriodicSync(account, "kim.hsl.keep_progress_alive.provider", new Bundle(), 1); } }
6、 MainActivity 启动账户同步
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 { @Override protected 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); // 开始同步 AccountUtils.autoSyncStart(); } @Override protected void onDestroy() { super.onDestroy(); // 1. 取消注册广播接收者, 也可以不取消注册 //KeepProgressAliveManager.getmInstance().registerReceiver(this); } }
7、 运行效果
在 Android 10.0 原生系统中 , 等待 15 分钟左右 , 没有拉起应用进程 ;
三、 源码资源
源码资源 :
GitHub 地址 : https://github.com/han1202012/Keep_Progress_Alive
CSDN 源码快照 : https://download.csdn.net/download/han1202012/16607754