startActivity兼容性问题总结
最近事情比较多,也遇到了很多坑,特别是最近android不同手机跳转scheme兼容性问题,在测试中发现android 6.0.1以下的手机不可以正常跳转,7.0-8.0的系统可以正常跳转,9.0的系统又无法正常跳转,为了找出真正的内部原因,今天特意查看相关的源代码
首先说说 android跳转scheme的代码如下
String url = "fungo:xxxxxx";
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(url));
startActivity(intent);
通过捕捉可以发现OPPO A57(android 6.0.1)手机在控制台中打印如下错误信息
Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag.Is this really what you want?
为什么不同型号的手机有的会出现有的不会出现?最综定位如下:
在执行在执行startActivity这个函数的时候需要依赖Context对象,如果Context刚好是Activity对象,那恭喜你,执行不会出现问题,如果不是activity,而是系统的Context那就有可能会出现问题了,特别是当我们封装跳转startActivity的函数的时候,参数往往是Context,下面的函数不是很熟悉, 这个时候如果将该函数作为 公共方法,那就特别容易出问题了,加上开发人员的测试手机刚刚是android7-8系统的,所以问题就被埋没了。
public void startActivity(Context contet,Uri uri){
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(url));
startActivity(intent);
}
说一下定位过程,知