博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获取activity栈内信息及不能自动更新app后自动重启的问题
阅读量:5960 次
发布时间:2019-06-19

本文共 1824 字,大约阅读时间需要 6 分钟。

hot3.png

搞了好多天的android apk自动更新,终于有点结果了。现说下怎么获取activity栈里的activty信息

//get some activity information from stack

ActivityManager manager = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE);

        List<RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(5);

        if (runningTaskInfos != null) {

            if(runningTaskInfos.get(0)!=null){

                ComponentName cn = runningTaskInfos.get(0).baseActivity;

                if(cn!=null){

                    Log.d(TAG, "pkg:" + cn.getPackageName());

                    Log.d(TAG, "cls:" + cn.getClassName());

                }

                Log.d(TAG, "running activity number is "+runningTaskInfos.get(0).numActivities);

            }

        }

需要添加权限

<uses-permission android:name="android.permission.GET_TASKS"/>


如果自动更新自己的app, install之后会发现栈底元素是

PackageName com.android.packageinstaller

ClassName com.android.packageinstaller.InstallAppProgress

如果在launch activity 的oncreate里面有如下代码

if (!isTaskRoot()) {     

            final Intent intent = getIntent();     

            final String intentAction = intent.getAction();      

            if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && 

                    intentAction != null && intentAction.equals(Intent.ACTION_MAIN)) {         

                Log.d(TAG,"Main Activity is not the root.  Finishing Main Activity instead of launching.");

                finish();

                }

}

那么在install新app之后是进到finish()的判断条件的, 这样导致app重装后不能重启。需要进一步添加判断。


附上app自动更新的实现:

//存储到外部download文件夹

String downloadedFilepath=new StringBuffer().append(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)).toString();

//启动install

String apkPath=downloadedFilepath+apkName;

Uri data = Uri.parse("file://"+apkPath);

 intent.setDataAndType(data, "application/vnd.android.package-archive");

startActivity(intent);

 //为了使package installer上面有"打开"按钮,需要先把所有acitivty清掉

//此处代码省略,大致是使用在 application里面创建的HashMap<String, Activity> map集合,然后获取每个activity,调用finish()方法。

需要用到的权限:

    <uses-permission android:name="android.permission.INSTALL_PACKAGES" />

 

转载于:https://my.oschina.net/u/268088/blog/364170

你可能感兴趣的文章
NYOJ-取石子
查看>>
AngularJS
查看>>
《zw版·Halcon-delphi系列原创教程》halconxlib控件列表
查看>>
List与数组的相互转换
查看>>
Computer Science Theory for the Information Age-4: 一些机器学习算法的简介
查看>>
socketserver模块使用方法
查看>>
json模块
查看>>
各型号英特尔CUP的功率
查看>>
scanf()中的%c 不能正常输入的问题
查看>>
PHP学习1——快速入门
查看>>
面试发散思维
查看>>
java日志commons-logging/log4j/slf4j/logBack需要知道的几件事
查看>>
TypeScript 2019 路线图:更效率,更易用!
查看>>
Springboot从HellWorld开始
查看>>
Apache uimaFIT 3.0.0 发布,Java 的 UIMA 注解类
查看>>
用js来实现那些数据结构15(图01)
查看>>
web前端学习:React是什么,为什么要使用它?
查看>>
常见排序算法及对应的时间复杂度和空间复杂度
查看>>
业界 | 在德州叫一辆自动驾驶车,Drive.ai安排了7辆无人车展开真实试验
查看>>
实时数据平台设计:解决从OLTP到OLAP实时流转缺失
查看>>