欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中檢查、設(shè)置默認(rèn)程序詳解

 更新時(shí)間:2015年01月17日 11:46:05   投稿:junjie  
這篇文章主要介紹了Android中檢查、設(shè)置默認(rèn)程序詳解,本文講解了檢測是否有默認(rèn)的程序、如果有默認(rèn)程序、沒有默認(rèn)的程序的情況等內(nèi)容,需要的朋友可以參考下

Android作為一個(gè)偉大的系統(tǒng),自然提供了設(shè)置默認(rèn)打開程序的實(shí)現(xiàn).在這篇文章中,我會介紹如何在Android系統(tǒng)中設(shè)置默認(rèn)的程序. 在設(shè)置默認(rèn)程序之前,無非有兩種情況,一種是已經(jīng)有默認(rèn)的程序,另一種則是沒有任何默認(rèn)程序.

檢測是否有默認(rèn)的程序

檢查是必須的,因?yàn)榻Y(jié)果關(guān)乎著我們下一步該怎么做.

復(fù)制代碼 代碼如下:

public void testGetDefaultActivity() {
    PackageManager pm = mContext.getPackageManager();
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("http://www.google.com"));
    ResolveInfo info = pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
    Log.i(VIEW_LOG_TAG, "getDefaultActivity info = " + info + ";pkgName = " + info.activityInfo.packageName);
}

其對應(yīng)的日志輸出如下

復(fù)制代碼 代碼如下:

I/View    ( 1145 ): View getDefaultActivity info = ResolveInfo{410e4868 com.android.internal.app.ResolverActivity p=0 o=0 m=0x0};pkgName = android

如果沒有默認(rèn)的程序,那么就會顯示出默認(rèn)的就會顯示com.android.internal.app.ResolverActivity,那么這個(gè)ResolverActivity是什么呢,其實(shí)它就是一個(gè)選擇打開程序的對話框,其廬山真面目應(yīng)該是這樣

如果我們設(shè)置了傲游瀏覽器作為我們的默認(rèn)瀏覽器,那么默認(rèn)的程序就應(yīng)該顯示關(guān)于傲游瀏覽器相關(guān)的信息. 如下.

復(fù)制代碼 代碼如下:

I/View    ( 1145 ): View getDefaultActivity info = ResolveInfo{410ae1e8 com.mx.browser.MxBrowserActivity p=0 o=0 m=0x208000};pkgName = com.mx.browser

那么如何判斷是否設(shè)置了默認(rèn)的程序呢,上面的方法默認(rèn)的ResolveInfo,如果info.activityInfo.packageName為android,則沒有設(shè)置,否則,有默認(rèn)的程序.

復(fù)制代碼 代碼如下:

public final boolean hasPreferredApplication(final Context context, final Intent intent) {
    PackageManager pm = context.getPackageManager();
    ResolveInfo info = pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
    return !"android".equals(info.activityInfo.packageName);
}

如果有默認(rèn)程序

我們需要做的是將現(xiàn)在的默認(rèn)的程序的默認(rèn)設(shè)置清除.

我們能通過代碼直接將默認(rèn)設(shè)置改寫成我們的么,實(shí)際上是不行的,因?yàn)闄?quán)限的問題. 原因是這樣的Android因?yàn)榛贚inux 內(nèi)核,Linux有著很棒的用戶概念,而Android中每個(gè)應(yīng)用就是一個(gè)在Linux內(nèi)核中的用戶.兩個(gè)級別相同的用戶無法刪除對方.

所以,我們只能交給用戶手動做.當(dāng)然這也是絕大多數(shù)程序的做法.你需要做的就是將使用者帶到程序詳情頁,通過這段代碼可以跳轉(zhuǎn)到應(yīng)用詳情頁.

復(fù)制代碼 代碼如下:

public void testStartAppDetails() {
    //Use the destination package name
    Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:com.mx.browser"));
    getActivity().startActivity(intent);
}

當(dāng)跳轉(zhuǎn)到已安裝的應(yīng)用詳情頁之后,你應(yīng)該提示用處點(diǎn)擊Clear Default 按鈕.


如果用戶從安裝詳情頁回到你的程序,你需要檢測是不是用戶清理了默認(rèn)的程序設(shè)置,判斷依據(jù)還是是否有默認(rèn)的程序設(shè)置,如果還有默認(rèn)的,繼續(xù)提示需要手動清理其他已設(shè)置的程序,直到用戶徹底清理完成之后,然后按照下面的沒有默認(rèn)設(shè)置程序的情況處理.

注意,存在多次清理的情況,如設(shè)置瀏覽器,先清理了UC默認(rèn)設(shè)置后,可能還需要清理海豚瀏覽器的情況.

沒有默認(rèn)的程序.

如果沒有默認(rèn)的程序,我們就需要設(shè)置我們希望的程序作為默認(rèn),但是,這頁不能在代碼中實(shí)現(xiàn),還是需要人為的交互選擇才可以.你需要做的就是使用類似如下代碼,然后彈出一個(gè)提示,告訴用戶選擇你的程序作為默認(rèn)的程序.至于提示語你可以充分發(fā)揮你的想象力.

復(fù)制代碼 代碼如下:

public void testStartChooseDialog() {
    Intent intent = new Intent();
    intent.setAction("android.intent.action.VIEW");
    intent.addCategory("android.intent.category.BROWSABLE");
    intent.setData(Uri.parse("http://jb51.net"));
    intent.setComponent(new ComponentName("android","com.android.internal.app.ResolverActivity"));
    getActivity().startActivity(intent);
}

取消自己的默認(rèn)程序設(shè)置

復(fù)制代碼 代碼如下:

public void testClearDefault() {
    PackageManager pm = mContext.getPackageManager();
    pm.clearPackagePreferredActivities(mContext.getPackageName());
}

上述方法只能清理自己的默認(rèn)設(shè)置

更近一步

實(shí)際上關(guān)于默認(rèn)設(shè)置的配置文件存放在/data/system/packages.xml

復(fù)制代碼 代碼如下:

<preferred-activities>
<item name="com.mx.browser/.MxBrowserActivity" match="200000" set="2">
<set name="com.android.browser/.BrowserActivity" />
<set name="com.mx.browser/.MxBrowserActivity" />
<filter>
<action name="android.intent.action.VIEW" />
<cat name="android.intent.category.BROWSABLE" />
<cat name="android.intent.category.DEFAULT" />
<scheme name="http" />
</filter>
</item>
</preferred-activities>

One More Thing

提問:當(dāng)一個(gè)程序程序安裝或卸載,系統(tǒng)會做什么

回答:當(dāng)一個(gè)程序安裝或者卸載,以瀏覽器為例子,如果你安裝了一個(gè)傲游瀏覽器或者卸載了一個(gè)UC瀏覽器,當(dāng)你從外部程序打開一個(gè)鏈接時(shí),系統(tǒng)不會使用之前的默認(rèn)程序打開,而是彈出一個(gè)選擇對話框供你選擇.

提問:什么時(shí)候系統(tǒng)會彈出選擇打開程序列表

回答:經(jīng)本人測試,實(shí)際是這樣的,當(dāng)有一個(gè)Intent過來的時(shí)候,系統(tǒng)會動態(tài)地收集能處理的Activity,然后從/data/system/packages.xml 讀取進(jìn)行比較,如果兩者不同,則彈出選擇對話框.

相關(guān)文章

  • Android RecyclerView item選中放大被遮擋問題詳解

    Android RecyclerView item選中放大被遮擋問題詳解

    這篇文章主要介紹了Android RecyclerView item選中放大被遮擋問題詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04
  • Android進(jìn)程間使用Intent進(jìn)行通信

    Android進(jìn)程間使用Intent進(jìn)行通信

    Android進(jìn)程間通信(IPC,Inter-Process Communication)底層采用的是 Binder 機(jī)制,具體到應(yīng)用層有網(wǎng)友根據(jù)安卓四大組件將進(jìn)程間通信方式分為對應(yīng)的四種方式 Activity, Broadcast, ContentProvider, Service
    2023-02-02
  • Android自定義View實(shí)現(xiàn)照片裁剪框與照片裁剪功能

    Android自定義View實(shí)現(xiàn)照片裁剪框與照片裁剪功能

    這篇文章主要介紹了Android自定義View實(shí)現(xiàn)照片裁剪框與照片裁剪功能的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • Android使用ViewBinding的詳細(xì)步驟(Kotlin簡易版)

    Android使用ViewBinding的詳細(xì)步驟(Kotlin簡易版)

    最近這段時(shí)間在學(xué)習(xí)Kotlin,突然發(fā)現(xiàn)谷歌已經(jīng)把kotlin-android-extensions插件廢棄,目前推薦使用ViewBinding來進(jìn)行替代,接下來通過本文給大家分享Android使用ViewBinding的詳細(xì)步驟,感興趣的朋友一起學(xué)習(xí)吧
    2021-05-05
  • RecyclerView的簡單使用

    RecyclerView的簡單使用

    這篇文章主要為大家詳細(xì)介紹了RecyclerView的簡單使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Android入門之Handler的使用教程詳解

    Android入門之Handler的使用教程詳解

    這篇文章主要為大家詳細(xì)介紹了Android中Handler機(jī)制的使用,文中的示例代碼講解詳細(xì),有需要的朋友可以借鑒參考下,希望能夠?qū)Υ蠹矣兴鶐椭?/div> 2022-11-11
  • Android Studio多渠道打包、自定義打包APK名稱

    Android Studio多渠道打包、自定義打包APK名稱

    Android Studio為我們提供了簡便的方法,可以多渠道打包,一次打包所有的渠道包。這篇文章主要介紹了Android Studio多渠道打包、自定義打包APK名稱,需要的朋友可以參考下
    2018-01-01
  • Android Studio配置(Android Studio4.1為例)

    Android Studio配置(Android Studio4.1為例)

    這篇文章主要介紹了Android Studio配置(Android Studio4.1為例),文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Android中實(shí)現(xiàn)ping功能的多種方法詳解

    Android中實(shí)現(xiàn)ping功能的多種方法詳解

    這篇文章主要介紹了Android中實(shí)現(xiàn)ping功能的多種方法詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 詳解Retrofit Interceptor(攔截器) 攔截請求并做相關(guān)處理

    詳解Retrofit Interceptor(攔截器) 攔截請求并做相關(guān)處理

    本篇文章主要介紹了詳解Retrofit Interceptor(攔截器) 攔截請求并做相關(guān)處理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04

最新評論