1. 程式人生 > >Android開機自啟動程式設定及控制方法

Android開機自啟動程式設定及控制方法

Android系統通過應用程式自行在系統中登記註冊事件(即Intent)來響應系統產生的各類訊息。

例如Android實現系統開機自啟動程需要在Manifest中加入如下Intent-filter及許可權Uses-permission即可。
    <intent-filter>  
        <action android:name="android.intent.action.BOOT_COMPLETED"/>  
(修改時候主要是去掉上面該行即可)
        <category android:name="android.intent.category.HOME" />  
    </intent-filter>  
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

   
(修改時候主要是去掉上面該行即可) Android系統為應用程式管理功能提供了大量的API,可以通過API控制Intent和permission,其中
上述配置表示應用程式會響應系統產生的android.intent.action.BOOT_COMPLETED(系統啟動完成)訊號,以此來實現應用程式自啟動。當然知道上述原理後,我們就可以隨心所欲的控制程式開機自啟動了。具體思路如下:

一、手工方法

基於上述原理,我們可以通過對系統中已安裝的程式去除其Manifest的上述配置片段來控制應用程式的對系統的響應,當然沒原始碼可修改編譯的情況下只能實現遮蔽其對有些訊號的響應,例如遮蔽該程式不再開機自啟動。手工方法就是利用有關工具直接在解壓其APK包後,修改其Manifest的上述配置行後再打包成APK,最後安裝到系統中就實現了遮蔽其自啟動功能。具體相關的工具軟體主要有APKTOOL。(請自己放狗去搜索下載)

二、程式設計實現

當然手工方法需要藉助APKTOOL等工具,步驟比較法繁瑣,我們可以通過自己開發來實現該功能。幸好

1、PackageManager

本類API是對所有基於載入資訊的資料結構的封裝,包括以下功能:

•安裝,解除安裝應用
•查詢permission相關資訊
•查詢Application相關資訊(application,activity,receiver,service,provider及相應屬性等)
•查詢已安裝應用
•增加,刪除permission
•清除使用者資料、快取,程式碼段等
非查詢相關的API需要特定的許可權,具體的API請參考SDK文件。


2、ActivityManager相關

本類API是對執行時管理功能和執行時資料結構的封裝,包括以下功能

•啟用/去啟用activity
•註冊/取消註冊動態接受intent
•傳送/取消傳送intent
•activity生命週期管理(暫停,恢復,停止,銷燬等)
•activity task管理(前臺->後臺,後臺->前臺,最近task查詢,執行時task查詢)
•啟用/去啟用service
•啟用/去啟用provider等
task管理相關API需要特定的許可權,具體API可參考SDK文件。

利用上述API原理的具體程式碼俺有空時候試試實現一個,應該不難的,都是呼叫現成的API實現。目前發現已有的控制開機自啟動的成熟應用程式主要是autostarts,可自己安裝一個試試,挺好用,實際上autostart有點名不副實,如果是我就會起個名字叫Intentcontrol,因為其不只是控制開機啟動訊號,它可以控制程式對大部分訊號的響應行為。

三、系統自帶工具

Android自帶了1、程式包管理工具:/system/bin/pm  2、activity管理工具:/system/bin/am

具體用法大致說明如下:

pm的使用方法可以參考

usage: pm [list|path|install|uninstall]
       pm list packages [-f]
       pm list permission-groups
       pm list permissions [-g] [-f] [-d] [-u] [GROUP]
       pm list instrumentation [-f] [TARGET-PACKAGE]
       pm list features
       pm path PACKAGE
       pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] PATH
       pm uninstall [-k] PACKAGE
       pm enable PACKAGE_OR_COMPONENT
       pm disable PACKAGE_OR_COMPONENT

The list packages command prints all packages.  Options:
  -f: see their associated file.

The list permission-groups command prints all known
permission groups.

The list permissions command prints all known
permissions, optionally only those in GROUP.  Options:
  -g: organize by group.
  -f: print all information.
  -s: short summary.
  -d: only list dangerous permissions.
  -u: list only the permissions users will see.

The list instrumentation command prints all instrumentations,
or only those that target a specified package.  Options:
  -f: see their associated file.

The list features command prints all features of the system.

The path command prints the path to the .apk of a package.

The install command installs a package to the system.  Options:
  -l: install the package with FORWARD_LOCK.
  -r: reinstall an exisiting app, keeping its data.
  -t: allow test .apks to be installed.
  -i: specify the installer package name.

The uninstall command removes a package from the system. Options:
  -k: keep the data and cache directories around.
after the package removal.

The enable and disable commands change the enabled state of
a given package or component (written as "package/class").

am的使用方法可以參考

usage: am [subcommand] [options]

    start an Activity: am start [-D] <INTENT>
        -D: enable debugging

    send a broadcast Intent: am broadcast <INTENT>

    start an Instrumentation: am instrument [flags] <COMPONENT>
        -r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT)
        -e <NAME> <VALUE>: set argument <NAME> to <VALUE>
        -p <FILE>: write profiling data to <FILE>
        -w: wait for instrumentation to finish before returning

    start profiling: am profile <PROCESS> start <FILE>
    stop profiling: am profile <PROCESS> stop

    <INTENT> specifications include these flags:
        [-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>]
        [-c <CATEGORY> [-c <CATEGORY>] ...]
        [-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...]
        [--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]
        [-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]
        [-n <COMPONENT>] [-f <FLAGS>] [<URI>]

http://dev.10086.cn/cmdn/wiki/index.php?edition-view-4742-1.html