通过activity对象获取来源包名
在fw层有一个神奇的参数,叫mReferrer,这个参数可以获取来源包名,比如通过桌面图标跳转到应用获取到的就是桌面的包名,通过dplink跳转也可以获取到,获取来源的包名
public static String getRefererCompat(Activity activity){
try {
return getRefererCompatInner(activity);
}catch (Exception e){
LogUtil.e(e);
}
return "";
}
private static String getRefererCompatInner(Activity activity){
String referrer = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
Uri uri = activity.getReferrer();
if(uri != null){
referrer = uri.getAuthority();
}
}
if(referrer == null){
try {
Bundle bundle = activity.getIntent().getExtras();
//S以上版本 偶现crash,增加try-catch避免crash
if(bundle.containsKey(Intent.EXTRA_REFERRER_NAME) || bundle.containsKey(Intent.EXTRA_REFERRER)){
referrer = reflectGetReferrer(activity);
}
}catch (Exception e){
LogUtil.e(TAG, e);
}
}
return referrer;
}
private static String reflectGetReferrer(Activity activity){
try {
Field referrerField = Activity.class.getDeclaredField("mReferrer");
referrerField.setAccessible(true);
return (String)referrerField.get(activity);
}catch (Exception e){
LogUtil.e(TAG, e);
}
return "";
}