設定預設瀏覽器是瀏覽器類軟體的基本功能之一,通過設定預設瀏覽器,提高使用者主動開啟自家產品的機會。但是由於國內不同rom差異很大,想要把這個功能做好,卻也不易。本文主要分享,如何通過競品分析的角度,解決我們在開發過程中遇到的問題。上面的這段**返回了當前手機上設定的預設瀏覽器。如果為空,證明沒有設定預設瀏覽器,如果不為空,已經把對應的包名,還有其他的資訊都已經儲存起來了。設定預設瀏覽器的主要有兩大流派,分別是官方提供法和越軌提權法
uc瀏覽器提供的那種思路,沒有嘗試,主要覺得對許可權要求太高,相容性無法保障,需要對容錯有很多考慮。官方提供的方法中,原生rom是沒有問題的,但是通過測試發現,現在的主流裝置上,華為,三星,小公尺,樂視個別型號上都無法設定成功。通過分析競品,qq,uc,獵豹都可以設定成功。這個就引起了我的好奇,他們是如何做到的,這裡主要探索獵豹瀏覽器的做法。
我們先來看下設定預設瀏覽器的流程圖
在上面提到的兩篇文章中,也都是這個思路。關鍵點有三個。
我們看獵豹,如果有設定預設瀏覽器,他會使用乙個listview,把所有的預設瀏覽器的列出來。我們只需要找到初始化listview的 adapter,就可以拿到對應的方法。settingdefaultactivity 的 onresume 方法,我們定位到 ah.d(this);我們看下具體的**,雖然被混淆了,邏輯還是能夠清晰的看到。簡單還原下,這段**就可以使用。
public static arraylist d(context paramcontext)
}}}catch (exception localexception)
}return localarraylist1;
}
由於我們已經儲存了所有的預設瀏覽器資料,遍歷裡面的資料就可以拿到預設瀏覽器的包名
/**
* 找到預設瀏覽器對應的包名
* 有可能會設定多個瀏覽器為預設瀏覽器,這裡只考慮其中乙個
*/public static string findpackagenameofdefaultbrowser(context context)
return "";
}
在settingdefaultbrowseractivity中 ,有個onclick 事件,是 清除按鈕的響應事件,找到下面的**
/**
*/intent intent = new intent();
intent.setdata(uri.fromparts("package", packagename, null));
activity.startactivityforresult(intent, requestcode);
}
可以看到這裡是傳送乙個intent ,請求清除預設瀏覽器設定的頁面。
/**
* 通知系統設定預設瀏覽器請求
*/public static void sendsetdefaultbrowserrequestintent(context context) catch (exception e)
}
根據這個思路,我們基本上解決了設定預設瀏覽器的幾個關鍵問題。經過測試,在主流裝置上都沒有問題。效果和qq,uc,獵豹達到了同樣的效果。提公升許可權相關方法
通用的設定預設瀏覽器方法
Android 反編譯方法 防止反編譯方法
android反編譯方法 android 防止反編譯的方法 1.自己的apk要簽名 簽名之後的apk 反編譯之前與之後的源 就會變成這樣 之前 public class mainactivity extends activity override public boolean oncreateopt...
Android專案反編譯
android程式的安裝包字尾名為.apk,其實也是乙個壓縮檔案 裡面包含了classes.dex res資料夾 lib資料夾 adnroidmainfest.xml等檔案 可以使用一般的壓縮解壓縮軟體開啟 比如說好壓 解壓之後可以得到上述的檔案。但是,安卓的壓縮包.apk,在壓縮的時候,會對資源檔...
Android 逆向 反編譯
將.apk檔案字尾名更改為.zip,並將其解壓 圖1.png 使用dex2jar工具來反編譯 c users administrator desktop dex2jar 2.0 dex2jar 2.0 d2j dex2jar c users admi nistrator desktop dex 1 ...