直播逻辑中当人数达到多少人的时候,会调转到其他的三方平台,这样的话就用系统的浏览器来进行跳转比较方便,一开始的代码如下:
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri content_url = Uri.parse(splitflowurl);//splitflowurl为分流地址
intent.setData(content_url);
startActivity(intent);
一开始坑就有了,这个splitflowurl地址至少是http开头的,跟后台确认过了,但是测试的时候测试人员不知道,就随便填了一个没有http开头的网址,如:www.baidu.com,然后就崩溃了。这样崩溃了好几次,总这样也不是办法,然后就加了try catch,至少让他先不崩溃了,添加后代码如下:
try {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri content_url = Uri.parse(splitflowurl);//splitflowurl为分流地址
intent.setData(content_url);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
继续上坑。。。这样代码跳转的时候有的手机就会提示好几个浏览器让你选择,测试MM感觉这样不好,不如直接用系统自带的浏览器进行跳转。我的红米2是这样的,还以为是手机系统问题,因为百度的代码就是打开系统浏览器的方法,但是华为手机上也出现这个问题,看来是代码有问题啊。
继续上网搜索然后找到调用手机自身浏览器的方法,添加代码
intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
代码就改成了下面这个样子:
try {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri content_url = Uri.parse(splitflowurl);//splitflowurl为分流地址
intent.setData(content_url);
intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
本来以为这样就完事大吉了,在我的红米2上打开调转的话就默认用系统自带的浏览器进行跳转,然后就打包给测试MM,坑又来了。。。我们有个三星S6 edge测试机,一打开跳转的时候就崩溃了,在logcat里面看报错信息也没有找到。看s6是安卓6.0系统,是不是系统对浏览器做啥限制呢? 然后就是一顿狂搜,没有搜到什么有价值的线索,看来应该不是6.0系统的问题。
那就注销原先所添加的代码,s6运行没问题,s6打开的是QQ浏览器而不是系统自带的浏览器,难道是有没有设置默认浏览器的问题,查看s6默认程序设置,里面果然默认的浏览器是QQ浏览器。
再回看一开始引入的代码,实际上那是调用的系统默认浏览器,没有设置默认浏览器的话,就会弹出浏览器的弹出选择框进行原则。
再转念一想,刚才发生在S6上的崩溃,应该是设置了默认的QQ浏览器,再去寻找系统自带浏览器打开的话就会崩溃。这样就比较符合逻辑了。
接下来就好办了,逻辑上就是在系统设置默认浏览器的情况下,调用的默认浏览器,没有设置的时候,就调用系统自带的浏览器。谷歌一下,添加如下代码:
//判断系统是否设置了默认浏览器
public boolean hasPreferredApplication(Context context, Intent intent) {
PackageManager pm = context.getPackageManager();
ResolveInfo info = pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
return !"android".equals(info.activityInfo.packageName);
}
//如果info.activityInfo.packageName为android,则没有设置,否则,有默认的程序.
原先的代码也改成:
try {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri content_url = Uri.parse(splitflowurl);//splitflowurl为分流地址
intent.setData(content_url);
if (!hasPreferredApplication(LiveStreamingActivity.this,intent)){
intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
}
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}finally {
finish();
}
OK,这样在每个手机上调试就没有问题了。
又可以愉快的玩耍了,哈哈