您的位置:首页 > 其它

MTK开机向导完成后直接跳转到默认网页

2015-06-19 10:34 155 查看
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也是一种隐患。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: