獲取activity棧內信息及不能自動更新app後自動重啓的問題

搞了好多天的android apk自動更新,終於有點結果了。現說下怎麼獲取activity棧裏的activty信息java

//get some activity information from stackandroid

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

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

        if (runningTaskInfos != null) {code

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

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

                if(cn!=null){get

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

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

                }

                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" />

相關文章
相關標籤/搜索