激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - Android中檢查、設置默認程序詳解

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

2021-03-12 15:50Android開發網 Android

這篇文章主要介紹了Android中檢查、設置默認程序詳解,本文講解了檢測是否有默認的程序、如果有默認程序、沒有默認的程序的情況等內容,需要的朋友可以參考下

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是什么呢,其實它就是一個選擇打開程序的對話框,其廬山真面目應該是這樣

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

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

 

復制代碼 代碼如下:

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 按鈕.

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

注意,存在多次清理的情況,如設置瀏覽器,先清理了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://jb51.net"));
    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 讀取進行比較,如果兩者不同,則彈出選擇對話框.

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 一级毛片手机在线观看 | 在线播放av片 | 在线视频 欧美日韩 | 国产一区网址 | 免看黄大片aa | 国产精品视频1区 | 亚洲精品一区二区三区在线看 | 中文字幕精品亚洲 | 久久国产精品久久久久久 | 亚洲va久久久噜噜噜久久男同 | 亚洲一区二区三区四区精品 | 免费一级特黄毛片 | 国产精品视频专区 | 成人免费视频视频在线观看 免费 | 欧美一级性 | 欧美三级美国一级 | 一边吃奶一边摸下娇喘 | 国产午夜精品久久久久婷 | 久久综合一区二区 | 91a在线观看 | 精品一区二区三区毛片 | 国产精品视频一区二区三区四区国 | 久久综合综合 | 最新黄色毛片 | 欧洲a级片| 在线观看网址av | 男男啪羞羞视频网站 | 久久网页 | 成人毛片网站 | 免费欧美精品 | 国产又粗又爽又深的免费视频 | 亚洲一区二区三区视频 | 日本一级黄色大片 | 在线99热| 久久久久电影网站 | 亚洲片在线观看 | 免费一级电影 | 欧美性受xxx黑人xyx性爽 | 日韩欧美电影一区二区三区 | 午夜激情视频免费 | 1区2区3区国产|