Android 11应用静默更新方法详解

更新:11-12 民间故事 我要投稿 纠错 投诉

今天给各位分享Android 11应用静默更新方法详解的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2.安装包存放在"storage/emulated/0/****.apk"

//称呼

PackageManagerCompatP.install(UpgradeFirmwareActivity.this,Configs.DOWN_DIR_PATH + Configs.DOWN_APK, getPackageManager());3.具体实施

导入android.app.PendingIntent;

导入android.content.Context;

导入android.content.Intent;

导入android.content.pm.PackageInstaller;

导入android.content.pm.PackageManager;

导入android.os.Build;

导入android.util.Log;

导入androidx.annotation.RequiresApi;

导入java.io.Closeable;

导入java.io.File;

导入java.io.FileInputStream;

导入java.io.IOException;

导入java.io.InputStream;

导入java.io.OutputStream;

公共类PackageManagerCompatP {

私有静态最终字符串TAG=PackageManagerCompatP.class.getSimpleName();

@RequiresApi(api=Build.VERSION_CODES.LOLLIPOP)

公共静态无效安装(上下文上下文,字符串apkFilePath,PackageManager packageManager){

文件apkFile=new File(apkFilePath);

PackageInstaller packageInstaller=packageManager.getPackageInstaller();

PackageInstaller.SessionParams sessionParams=new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL);

sessionParams.setSize(apkFile.length());

int sessionId=createSession(packageInstaller, sessionParams);

if (sessionId !=-1) {

布尔copySuccess=copyInstallFile(packageInstaller, sessionId, apkFilePath);

Log.d(TAG,"install:" + copySuccess);

if (复制成功) {

execInstallCommand(上下文, packageInstaller, sessionId);

}

}

}

@RequiresApi(api=Build.VERSION_CODES.LOLLIPOP)

私有静态int createSession(PackageInstaller packageInstaller,

PackageInstaller.SessionParams sessionParams) {

int 会话ID=-1;

尝试{

sessionId=packageInstaller.createSession(sessionParams);

} catch (IOException e) {

e.printStackTrace();

}

返回会话ID;

}

@RequiresApi(api=Build.VERSION_CODES.LOLLIPOP)

私有静态布尔copyInstallFile(PackageInstaller packageInstaller,

int sessionId, String apkFilePath) {

输入流=null;

输出流输出=null;

PackageInstaller.Session 会话=null;

布尔值成功=false;

尝试{

文件apkFile=new File(apkFilePath);

会话=packageInstaller.openSession(sessionId);

out=session.openWrite("base.apk", 0, apkFile.length());

in=new FileInputStream(apkFile);

int 总计=0, c;

字节[]缓冲区=新字节[65536];

while ((c=in.read(buffer)) !=-1) {

总计+=c;

out.write(缓冲区, 0, c);

}

会话.fsync(输出);

成功=真;

} catch (IOException e) {

e.printStackTrace();

} 最后{

安静地关闭(退出);

安静地关闭(中);

安静地关闭(会话);

}

返回成功;

}

@RequiresApi(api=Build.VERSION_CODES.LOLLIPOP)

私有静态void execInstallCommand(Context context, PackageInstaller packageInstaller, int sessionId) {

PackageInstaller.Session 会话=null;

尝试{

会话=packageInstaller.openSession(sessionId);

Intent意图=new Intent(context, InstallReceiver.class);

PendingIntentendingIntent=PendingIntent.getBroadcast(上下文,1,意图,PendingIntent.FLAG_UPDATE_CURRENT);

session.commit(pendingIntent.getIntentSender());

Log.d(TAG,"execInstallCommand:");

} catch (IOException e) {

e.printStackTrace();

} 最后{

安静地关闭(会话);

}

}

私有静态无效closeQuietly(Closeable c) {

如果(c!=null){

尝试{

c.close();

} catch(IOException 被忽略){

忽略.printStackTrace();

}

}

}

}接收安装完成消息

如果应用程序静默升级,则不会收到任何消息。

因为我的项目设置为桌面,所以安装完成后会自动重启,不需要在代码中进行操作。

导入android.content.BroadcastReceiver;

导入android.content.Context;

导入android.content.Intent;

导入android.content.pm.PackageInstaller;

导入android.util.Log;

公共类InstallReceiver扩展BroadcastReceiver {

@覆盖

公共无效onReceive(上下文上下文,意图意图){

Log.d("InstallReceiver", "onReceive:" +intent.getIntExtra(PackageInstaller.EXTRA_STATUS, PackageInstaller.STATUS_FAILURE));

最终int status=Intent.getIntExtra(PackageInstaller.EXTRA_STATUS, PackageInstaller.STATUS_FAILURE);

如果(状态==PackageInstaller.STATUS_SUCCESS){

Log.d("InstallReceiver", "onReceive: true");

} 别的{

Log.d("InstallReceiver", "onReceive: false");

}

}

}清单文件注册

坑:

AndroidManifest.xml中的以下标签需要删除

android:persistent="true"

后记:代码来自网络

用户评论

◆残留德花瓣

这下玩手机终于不用一个个app更新了!

    有11位网友表示赞同!

我怕疼别碰我伤口

安卓11真棒,不用担心会错过一些版本更新!

    有11位网友表示赞同!

┲﹊怅惘。

静默升级是不是就意味着后台自动更新?很方便啊。

    有7位网友表示赞同!

滴在键盘上的泪

这样不会影响用户正在用app的时候。

    有13位网友表示赞同!

残留の笑颜

以前每次想更新应用都要手动下载安装了,现在省事多了!

    有18位网友表示赞同!

泪湿青衫

感觉安卓11越来越贴近用户的需求了。

    有9位网友表示赞同!

殃樾晨

期待我的手机可以升级到安卓11试试这个功能!

    有16位网友表示赞同!

涐们的幸福像流星丶

有没有人知道这会不会对电池耗电有影响?

    有5位网友表示赞同!

冷月花魂

之前有时候更新app太慢,还会卡顿,静默升级就好了!

    有15位网友表示赞同!

旧爱剩女

安卓11的很多新功能都挺不错看的。

    有14位网友表示赞同!

喜欢梅西

感觉手机厂家最近越来越关注用户体验了!

    有10位网友表示赞同!

从此我爱的人都像你

这样我就可以不用专门腾时间去更新应用了!

    有12位网友表示赞同!

浅嫣婉语

终于可以实现手机一键自动更新啦!

    有14位网友表示赞同!

太易動情也是罪名

之前每次更新都要确认,现在直接省了这一步。

    有10位网友表示赞同!

淡写薰衣草的香

不过希望静默升级不会导致一些不必要的应用冲突吧!

    有8位网友表示赞同!

凉月流沐@

这个功能挺实用的,希望能被更多手机都支持!

    有19位网友表示赞同!

大王派我来巡山!

安卓系统越来越智能化了,很棒!

    有10位网友表示赞同!

长裙绿衣

不知道有没有办法手动控制静默升级呢?

    有8位网友表示赞同!

麝香味

静默升级会不会占用很高的网络流量?

    有18位网友表示赞同!

【Android 11应用静默更新方法详解】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:广州批发市场鞋子性价比高,精选十大优质批发场所推荐 下一篇:《暗杀教室》港版连载概览:第七期精彩内容抢先看