通过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 "";

    }

你可能感兴趣的:(通过activity对象获取来源包名)