android如何從應(yīng)用程序進(jìn)入設(shè)置的各個(gè)頁面

  1. 調(diào)用Android系統(tǒng)“應(yīng)用程序信息(Application Info)”界面
    大致如下:如果不想細(xì)看骂倘,直接調(diào)到后面,即可有現(xiàn)成的代碼0_0讲仰。


應(yīng)用設(shè)置

到了這個(gè)頁面,就可以做很多的事了碴卧,比如打開開機(jī)啟動(dòng)等等。
那么如何進(jìn)入這個(gè)頁面呢乃正?
我們只要以android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS作為Action住册;“package:應(yīng)用程序的包名”作為URI,就可以用startActivity啟動(dòng)應(yīng)用程序信息界面了烫葬。代碼如下:

Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);  
Uri uri = Uri.fromParts(SCHEME, packageName, null);  
intent.setData(uri);  
startActivity(intent);  

但是界弧,在Android 2.3之前的版本,并沒有公開相關(guān)的接口搭综。
我們可以分別看到Android2.1和Android2.2的應(yīng)用管理程序(ManageApplications.java)是如何啟動(dòng)InstalledAppDetails的:

     // utility method used to start sub activity
     private void startApplicationDetailsActivity() {
         // Create intent to start new activity
         Intent intent = new Intent(Intent.ACTION_VIEW);
         intent.setClass(this, InstalledAppDetails.class);
         intent.putExtra(APP_PKG_NAME, mCurrentPkgName);
         // start new activity to display extended information
         startActivityForResult(intent, INSTALLED_APP_DETAILS);
     }

而對于2.2與2.1常量APP_PKG_NAME的定義并不相同垢箕,在2.2中定義為”pkg”,在2.1中定義為”com.android.settings.ApplicationPkgName”
因此兑巾,對于2.1及以下版本条获,我們可以這樣調(diào)用InstalledAppDetails:

Intent i = new Intent(Intent.ACTION_VIEW);                
i.setClassName("com.android.settings","com.android.settings.InstalledAppDetails");
i.putExtra("com.android.settings.ApplicationPkgName", packageName); 
startActivity(i);

對于2.2,只需替換上面putExtra的第一個(gè)參數(shù)為”pkg”蒋歌。

綜上帅掘,通用的調(diào)用“應(yīng)用程序信息”的代碼如下:

private static final String SCHEME = "package";
/**
 * 調(diào)用系統(tǒng)InstalledAppDetails界面所需的Extra名稱(用于Android 2.1及之前版本)
 */
private static final String APP_PKG_NAME_21 = "com.android.settings.ApplicationPkgName";
/**
 * 調(diào)用系統(tǒng)InstalledAppDetails界面所需的Extra名稱(用于Android 2.2)
 */
private static final String APP_PKG_NAME_22 = "pkg";
/**
 * InstalledAppDetails所在包名
 */
private static final String APP_DETAILS_PACKAGE_NAME = "com.android.settings";
/**
 * InstalledAppDetails類名
 */
private static final String APP_DETAILS_CLASS_NAME = "com.android.settings.InstalledAppDetails";
/**
 * 調(diào)用系統(tǒng)InstalledAppDetails界面顯示已安裝應(yīng)用程序的詳細(xì)信息。 對于Android 2.3(Api Level
 * 9)以上堂油,使用SDK提供的接口修档; 2.3以下,使用非公開的接口(查看InstalledAppDetails源碼)府框。
 * 
 * @param context
 * 
 * @param packageName
 *            應(yīng)用程序的包名
 */
public static void showInstalledAppDetails(Context context, String packageName) {
    Intent intent = new Intent();
    final int apiLevel = Build.VERSION.SDK_INT;
    if (apiLevel >= 9) { // 2.3(ApiLevel 9)以上吱窝,使用SDK提供的接口
        intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        Uri uri = Uri.fromParts(SCHEME, packageName, null);
        intent.setData(uri);
    } else { // 2.3以下,使用非公開的接口(查看InstalledAppDetails源碼)
        // 2.2和2.1中迫靖,InstalledAppDetails使用的APP_PKG_NAME不同院峡。
        final String appPkgName = (apiLevel == 8 ? APP_PKG_NAME_22
                : APP_PKG_NAME_21);
        intent.setAction(Intent.ACTION_VIEW);
        intent.setClassName(APP_DETAILS_PACKAGE_NAME,
                APP_DETAILS_CLASS_NAME);
        intent.putExtra(appPkgName, packageName);
    }
    context.startActivity(intent);
}

打開應(yīng)用:


                if(FileTypeUtils.isApk(path) && isApkInstalled(path)) {
                    //已安裝apk--->just open the app instead of install it
                    String packageName1 = ApkUtils.getApkPackageName(getContext(), path);
                    Intent it = getActivity().getPackageManager().getLaunchIntentForPackage(packageName1);
                    startActivity(it);
                }else {
                  //path 是應(yīng)用路徑
                   Intent it = new Intent(Intent.ACTION_VIEW);
                   it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                   it.setDataAndType(Uri.fromFile(new File(path)), getMIMEType(path));
                    context.startActivity(it);
                }

卸載應(yīng)用

               String packageName = ApkUtils.getApkPackageName(getContext(), path);
                Uri packageUri = Uri.parse("package:" + packageName);
                Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageUri);
                startActivity(uninstallIntent);

補(bǔ)充

最后附上一些常用的設(shè)置描述,具體的說明都在android.provider.Settings.java這個(gè)類里面
打開這些界面就非常的容易了:

//比如打開網(wǎng)絡(luò)設(shè)置頁面
 Intent intent=null;
 //判斷手機(jī)系統(tǒng)的版本  即API大于10 就是3.0或以上版本 
 if(android.os.Build.VERSION.SDK_INT>10){
     intent = new    Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
}else{
    intent = new Intent();
    ComponentName component = new ComponentName("com.android.settings","com.android.settings.WirelessSettings");
   intent.setComponent(component);          intent.setAction("android.intent.action.VIEW");
   }
context.startActivity(intent);

使用下面字段可以在軟件中直接打開相應(yīng)的系統(tǒng)界面

com.android.settings.AccessibilitySettings 輔助功能設(shè)置
  com.android.settings.ActivityPicker 選擇活動(dòng)
  com.android.settings.ApnSettings APN設(shè)置
  com.android.settings.ApplicationSettings 應(yīng)用程序設(shè)置
  com.android.settings.BandMode 設(shè)置GSM/UMTS波段
  com.android.settings.BatteryInfo 電池信息
  com.android.settings.DateTimeSettings 日期和壩上旅游網(wǎng)時(shí)間設(shè)置
  com.android.settings.DateTimeSettingsSetupWizard 日期和時(shí)間設(shè)置
  com.android.settings.DevelopmentSettings 應(yīng)用程序設(shè)置=》開發(fā)設(shè)置
  com.android.settings.DeviceAdminSettings 設(shè)備管理器
  com.android.settings.DeviceInfoSettings 關(guān)于手機(jī)
  com.android.settings.Display 顯示——設(shè)置顯示字體大小及預(yù)覽
  com.android.settings.DisplaySettings 顯示設(shè)置
  com.android.settings.DockSettings 底座設(shè)置
  com.android.settings.IccLockSettings SIM卡鎖定設(shè)置
  com.android.settings.InstalledAppDetails 語言和鍵盤設(shè)置
  com.android.settings.LanguageSettings 語言和鍵盤設(shè)置
  com.android.settings.LocalePicker 選擇手機(jī)語言
  com.android.settings.LocalePickerInSetupWizard 選擇手機(jī)語言
  com.android.settings.ManageApplications 已下載(安裝)軟件列表
  com.android.settings.MasterClear 恢復(fù)出廠設(shè)置
  com.android.settings.MediaFormat 格式化手機(jī)閃存
  com.android.settings.PhysicalKeyboardSettings 設(shè)置鍵盤
  com.android.settings.PrivacySettings 隱私設(shè)置
  com.android.settings.ProxySelector 代理設(shè)置
  com.android.settings.RadioInfo 手機(jī)信息
  com.android.settings.RunningServices 正在運(yùn)行的程序(服務(wù))
  com.android.settings.SecuritySettings 位置和安全設(shè)置
  com.android.settings.Settings 系統(tǒng)設(shè)置
  com.android.settings.SettingsSafetyLegalActivity 安全信息
  com.android.settings.SoundSettings 聲音設(shè)置
  com.android.settings.TestingSettings 測試——顯示手機(jī)信息系宜、電池信息照激、使用情況統(tǒng)計(jì)、Wifi information盹牧、服務(wù)信息
  com.android.settings.TetherSettings 綁定與便攜式熱點(diǎn)
  com.android.settings.TextToSpeechSettings 文字轉(zhuǎn)語音設(shè)置
  com.android.settings.UsageStats 使用情況統(tǒng)計(jì)
  com.android.settings.UserDictionarySettings 用戶詞典
  com.android.settings.VoiceInputOutputSettings 語音輸入與輸出設(shè)置
  com.android.settings.WirelessSettings 無線和網(wǎng)絡(luò)設(shè)置

參考:

http://blog.csdn.net/zhengzhiren/article/details/6159750

android如何從應(yīng)用程序進(jìn)入設(shè)置的各個(gè)頁面

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末俩垃,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子汰寓,更是在濱河造成了極大的恐慌吆寨,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踩寇,死亡現(xiàn)場離奇詭異,居然都是意外死亡六水,警方通過查閱死者的電腦和手機(jī)俺孙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門辣卒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人睛榄,你說我怎么就攤上這事荣茫。” “怎么了场靴?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵啡莉,是天一觀的道長。 經(jīng)常有香客問我旨剥,道長咧欣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任轨帜,我火速辦了婚禮魄咕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蚌父。我一直安慰自己哮兰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布苟弛。 她就那樣靜靜地躺著喝滞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪膏秫。 梳的紋絲不亂的頭發(fā)上右遭,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機(jī)與錄音荔睹,去河邊找鬼狸演。 笑死,一個(gè)胖子當(dāng)著我的面吹牛僻他,可吹牛的內(nèi)容都是我干的宵距。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吨拗,長吁一口氣:“原來是場噩夢啊……” “哼满哪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起劝篷,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤哨鸭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后娇妓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體像鸡,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年哈恰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了只估。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片志群。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蛔钙,靈堂內(nèi)的尸體忽然破棺而出锌云,到底是詐尸還是另有隱情,我是刑警寧澤吁脱,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布桑涎,位于F島的核電站,受9級特大地震影響兼贡,放射性物質(zhì)發(fā)生泄漏攻冷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一紧显、第九天 我趴在偏房一處隱蔽的房頂上張望讲衫。 院中可真熱鬧,春花似錦孵班、人聲如沸涉兽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽枷畏。三九已至,卻和暖如春虱饿,著一層夾襖步出監(jiān)牢的瞬間拥诡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工氮发, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留渴肉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓爽冕,卻偏偏與公主長得像仇祭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子颈畸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容