a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 系統 > Android > 正文

Android中檢查、設置默認程序詳解

2020-04-11 11:41:09
字體:
來源:轉載
供稿:網友

Android作為一個偉大的系統,自然提供了設置默認打開程序的實現.在這篇文章中,我會介紹如何在Android系統中設置默認的程序. 在設置默認程序之前,無非有兩種情況,一種是已經有默認的程序,另一種則是沒有任何默認程序.

檢測是否有默認的程序

檢查是必須的,因為結果關乎著我們下一步該怎么做.

復制代碼 代碼如下:

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);
}

其對應的日志輸出如下

復制代碼 代碼如下:

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

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

如果我們設置了傲游瀏覽器作為我們的默認瀏覽器,那么默認的程序就應該顯示關于傲游瀏覽器相關的信息. 如下.

復制代碼 代碼如下:

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

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

復制代碼 代碼如下:

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);
}

如果有默認程序

我們需要做的是將現在的默認的程序的默認設置清除.

我們能通過代碼直接將默認設置改寫成我們的么,實際上是不行的,因為權限的問題. 原因是這樣的Android因為基于Linux 內核,Linux有著很棒的用戶概念,而Android中每個應用就是一個在Linux內核中的用戶.兩個級別相同的用戶無法刪除對方.

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

復制代碼 代碼如下:

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);
}

當跳轉到已安裝的應用詳情頁之后,你應該提示用處點擊Clear Default 按鈕.


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

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

沒有默認的程序.

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

復制代碼 代碼如下:

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

取消自己的默認程序設置

復制代碼 代碼如下:

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

上述方法只能清理自己的默認設置

更近一步

實際上關于默認設置的配置文件存放在/data/system/packages.xml

復制代碼 代碼如下:

<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

提問:當一個程序程序安裝或卸載,系統會做什么

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

提問:什么時候系統會彈出選擇打開程序列表

回答:經本人測試,實際是這樣的,當有一個Intent過來的時候,系統會動態地收集能處理的Activity,然后從/data/system/packages.xml 讀取進行比較,如果兩者不同,則彈出選擇對話框.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久免费精品视频 | 青青草视频在线观看 | 毛片久久久 | 免费在线色 | 成人黄色在线看 | 一级做a毛片 | 国产一区网站 | 国产区视频在线观看 | 国产高潮好爽受不了了夜色 | 日本在线一区二区三区 | 日韩激情网站 | 日韩一区精品视频 | 国产精品久久久久久久粉嫩 | 在线观看成人网 | 久久99国产精品 | 亚洲天堂一区 | 视频国产在线 | 久久影音先锋 | 欧美视频在线一区 | 色优久久 | 秋霞在线一区 | 国产欧美一区二区精品忘忧草 | 久久久影院| 日本黄色片在线观看 | 国产精品美女久久久久久久网站 | 色视频免费在线观看 | 精品亚洲一区二区三区 | 亚洲精品美女久久久 | www.操.com| 国产www网站| 中文字幕自拍偷拍 | 国产一二区在线 | 91精品在线观看入口 | 亚洲精品第一页 | 精品国产99| 国产中文在线 | 一区二区在线 | 一区二区不卡 | 日本不卡免费新一二三区 | 国产精品久久久av | 日本免费黄色 |