1. 程式人生 > >MTK開機嚮導完成後直接跳轉到預設網頁

MTK開機嚮導完成後直接跳轉到預設網頁

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
 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()) {...
最後一個問題,這個改完後新的bug是橫豎屏切換的時候,Launcher介面的右側會出現一道黑條,所以上邊的方法可以完全忽略,只跟著下邊方法改

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也是一種隱患。