MTK開機嚮導完成後直接跳轉到預設網頁
阿新 • • 發佈:2019-02-18
KK版本的:之前有個客戶要在開機嚮導完成之後直接跳轉到預設的網頁去,下面是修改方法,有的是有弊端的,會引起別的bug,最後是最終的解決方案,不過有些麻煩。
1.直接在MTK的開機嚮導OOBE完成後,點選finish按鈕的時候跳轉到網頁上去(用百度舉例):
mediatek\packages\apps\OOBE\src\com\mediatek\oobe\advanced\AdvanceSettingsEntrance.java
import android.net.Uri; 在 public void onClick(View v)下: if (v == mNextButton){ Intent it = new Intent (Intent.ACTION_VIEW); it.setData(Uri.parse("http://www.baidu.com")); it=Intent.createChooser(it,null); startActivity(it); finish... }else if...
就這麼幾句就ok,但是這種方法有時會直接進入Launcher介面,不會到預設網頁上
2.下邊解決到網頁上的方法:
packages\apps\Browser\src\com\android\browser\BrowserActivity.java
private boolean shouldIgnoreIntents() {
return false;
}
加上return false;就會啟動瀏覽器
3.如果系統裡邊有多個瀏覽器,要預設一個:
將步驟1中的startActivity(it)之前的三句替換掉:
Uri uri = Uri.parse("http://www.baidu.com"); Intent it = new Intent (Intent.ACTION_VIEW.uri); it.setClassName("com.android.browser";"com.android.browser.BrowserActivity"); //系統預設的瀏覽器,要用別的瀏覽器,替換包名和類名就可以
這樣改,又有新問題出現,燒完版本第一次開機或者恢復出廠設定後開機橫屏狀態下預置的apk快捷方式可能會消失
4.修改apk快捷方式丟失的方法
packages\apps\Launcher3\AndroidManifest.xml
去掉相同的一句:
android:screenOrientation="nosensor"
packages\apps\Launcher3\src\com\android\launcher3\LauncherModel.java
最後一個問題,這個改完後新的bug是橫豎屏切換的時候,Launcher介面的右側會出現一道黑條,所以上邊的方法可以完全忽略,只跟著下邊方法改private boolean loadWorkspace() { ...... // Check if we need to do any upgrade-path logic // boolean loadedOldDb = LauncherAppState.getLauncherProvider().justLoadedOldDb(); //註釋掉此句 boolean loadedOldDb = false; //改為false } loadedOldDb = LauncherAppState.getLauncherProvider().justLoadedOldDb(); //新增這一句就好,下邊的是原始碼 if (loadedOldDb) { long maxScreenId = 0; // If we're importing we use the old screen order. for (ItemInfo item: sBgItemsIdMap.values()) {...
5.修改跳轉到網頁的最終方法(去掉OOBE裡修改的內容,直接改framework和Launcher)
frameworks\base\packages\SettingsProvider\res\values\defaults.xml 新增一句
<integer name="def_start_url" translatable="false">1</integer>
frameworks\base\api\current.txt 新增一句
field public static final java.lang.String START_URI = "start_uri";
frameworks\base\core\java\android\provider\Settings.java 新增兩處
public static final String SCREEN_OFF_TIMEOUT = "screen_off_timeout";
public static final String START_URI = "start_uri"; //新增此句
public static final String[] SETTINGS_TO_BACKUP = {
...
START_URI //新增此句
};
frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java 新增一處 private void loadSystemSettings(SQLiteDatabase db) {
SQLiteStatement stmt = null;
try {
...
loadIntegerSetting(stmt, Settings.System.POINTER_DOUBLE_CLICK_SPEED,
R.integer.def_double_click_speed);
//此處新增下句
loadIntegerSetting(stmt, Settings.System.START_URI,
R.integer.def_start_url);
}finally ...
packages\apps\Launcher3\AndroidManifest.xml 新增一處
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
packages\apps\Launcher3\src\com\android\launcher3\Launcher.java 新增一處
protected void onResume() {
...
mWorkspace.updateInteractionForState();
mWorkspace.onResume();
//此處新增
if(isFirstLoadUri()){
Uri uri = Uri.parse("http://www.baidu.com");
Intent it =new Intent(Intent.ACTION_VIEW,uri);
it.setClassName("com.android.browser","com.android.browser.BrowserActivity");
startActivity(it);
Settings.System.putInt(
getContentResolver(), Settings.System.START_URI,0);
} //新增結束
}
//再新增
private boolean isFirstLoadUri(){
return false;
return (Settings.System.getInt(getContentResolver(), Settings.System.START_URI,0)) > 0;
}
綜上所述,前邊4條都沒什麼用,只是失敗的過程,結果在最後一條。以上的失敗都是學習積累經驗的過程。由此看出,改一個問題得全面考慮,否則隱藏的bug也是一種隱患。