文档章节

获取activity栈内信息及不能自动更新app后自动重启的问题

球球
 球球
发布于 2015/01/06 11:09
字数 337
阅读 20
收藏 0

搞了好多天的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" />



© 著作权归作者所有

下一篇: adb shell命令
球球
粉丝 4
博文 250
码字总数 232531
作品 0
石景山
程序员
私信 提问
Android知识点回顾之Manifest文件-下篇

application 应用的声明。包含应用组件的声明和对组件有相关影响的属性声明。 name:Application子类(自定义Application)的全名,此Application子类会在所有组件之前进行初始化。此项为可选...

星泉毅
2017/11/12
0
0
Android 深入探讨Activity的四种启动模式

四种启动模式的异同点 1.singleTask,singletop,singleInstance 某种情况下基本上都具有保证Activity在任务栈中具有唯一性 2.singleTask和singleTop实例存在时,singleTask不会创建实例,sin...

IamOkay
2014/11/22
215
0
DroidPlugin手札——home键强杀处理

DroidPlugin手札——home键强杀处理 DroidPlugin是360开源的插件化框架,github地址为:github.com/DroidPlugin…。 因公司业务及项目历史原因,来公司的这段时间一直在使用DroidPlugin进行业...

GitLqr
01/21
0
0
Android 系统System/应用App OTA升级

-- Android系统OTA升级流程,Android App OTA升级; 公司的车载系统使用了MTK的板子,深度定制的Android系统,平时开发过程中的修改可以直接重新烧录固件,但设备量产投入市场之后的修改只能通...

desaco
05/09
0
0
Android 多语言介绍及实战

基本使用 创建多语言文件夹 右键res,选择,选择,选择自己想要适配的语言类型 设置应用内多语言 Android 7.0以下 Android 7.0及以上 有单一的目标语言变成了一个语言列表,系统会根据这个列表...

大头呆
01/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
5
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0
栈-链式(c/c++实现)

上次说“栈是在线性表演变而来的,线性表很自由,想往哪里插数据就往哪里插数据,想删哪数据就删哪数据...。但给线性表一些限制呢,就没那么自由了,把线性表的三边封起来就变成了栈,栈只能...

白客C
今天
43
0
Mybatis Plus service

/** * @author beth * @data 2019-10-20 23:34 */@RunWith(SpringRunner.class)@SpringBootTestpublic class ServiceTest { @Autowired private IUserInfoService iUserInfoS......

一个yuanbeth
今天
5
0
php7-internal 7 zval的操作

## 7.7 zval的操作 扩展中经常会用到各种类型的zval,PHP提供了很多宏用于不同类型zval的操作,尽管我们也可以自己操作zval,但这并不是一个好习惯,因为zval有很多其它用途的标识,如果自己...

冻结not
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部