Intent anchor syntax description

前端 未结 2 832
时光说笑
时光说笑 2021-02-10 04:07

I\'m trying to use the intent anchor to launch my app as described here. I\'m able to get it to launch my app using this syntax,



        
2条回答
  •  无人共我
    2021-02-10 04:46

    As at android 28, the API has changed. Here is what the toUri code has been changed to:

    public String toUri(@UriFlags int flags) {
        StringBuilder uri = new StringBuilder(128);
        if ((flags&URI_ANDROID_APP_SCHEME) != 0) {
            if (mPackage == null) {
                throw new IllegalArgumentException(
                        "Intent must include an explicit package name to build an android-app: "
                        + this);
            }
            uri.append("android-app://");
            uri.append(mPackage);
            String scheme = null;
            if (mData != null) {
                scheme = mData.getScheme();
                if (scheme != null) {
                    uri.append('/');
                    uri.append(scheme);
                    String authority = mData.getEncodedAuthority();
                    if (authority != null) {
                        uri.append('/');
                        uri.append(authority);
                        String path = mData.getEncodedPath();
                        if (path != null) {
                            uri.append(path);
                        }
                        String queryParams = mData.getEncodedQuery();
                        if (queryParams != null) {
                            uri.append('?');
                            uri.append(queryParams);
                        }
                        String fragment = mData.getEncodedFragment();
                        if (fragment != null) {
                            uri.append('#');
                            uri.append(fragment);
                        }
                    }
                }
            }
            toUriFragment(uri, null, scheme == null ? Intent.ACTION_MAIN : Intent.ACTION_VIEW,
                    mPackage, flags);
            return uri.toString();
        }
        String scheme = null;
        if (mData != null) {
            String data = mData.toString();
            if ((flags&URI_INTENT_SCHEME) != 0) {
                final int N = data.length();
                for (int i=0; i= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
                            || (c >= '0' && c <= '9') || c == '.' || c == '-' || c == '+') {
                        continue;
                    }
                    if (c == ':' && i > 0) {
                        // Valid scheme.
                        scheme = data.substring(0, i);
                        uri.append("intent:");
                        data = data.substring(i+1);
                        break;
                    }
    
                    // No scheme.
                    break;
                }
            }
            uri.append(data);
    
        } else if ((flags&URI_INTENT_SCHEME) != 0) {
            uri.append("intent:");
        }
    
        toUriFragment(uri, scheme, Intent.ACTION_VIEW, null, flags);
    
        return uri.toString();
    }
    

    This shows that the chosen answer will no longer work.

    Check this answer by David Wasser for a working solution.

提交回复
热议问题