Intent anchor syntax description

前端 未结 2 830
时光说笑
时光说笑 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 05:05

    Here is the method toUri() from the Intent class:

    public String toUri(int flags) {
        StringBuilder uri = new StringBuilder(128);
        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 == '.' || 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:");
        }
        uri.append("#Intent;");
        if (scheme != null) {
            uri.append("scheme=").append(scheme).append(';');
        }
        if (mAction != null) {
            uri.append("action=").append(Uri.encode(mAction)).append(';');
        }
        if (mCategories != null) {
            for (String category : mCategories) {
                uri.append("category=").append(Uri.encode(category)).append(';');
            }
        }
        if (mType != null) {
            uri.append("type=").append(Uri.encode(mType, "/")).append(';');
        }
        if (mFlags != 0) {
            uri.append("launchFlags=0x").append(Integer.toHexString(mFlags)).append(';');
        }
        if (mPackage != null) {
            uri.append("package=").append(Uri.encode(mPackage)).append(';');
        }
        if (mComponent != null) {
            uri.append("component=").append(Uri.encode(
                    mComponent.flattenToShortString(), "/")).append(';');
        }
        if (mSourceBounds != null) {
            uri.append("sourceBounds=")
                    .append(Uri.encode(mSourceBounds.flattenToString()))
                    .append(';');
        }
        if (mExtras != null) {
            for (String key : mExtras.keySet()) {
                final Object value = mExtras.get(key);
                char entryType =
                        value instanceof String    ? 'S' :
                        value instanceof Boolean   ? 'B' :
                        value instanceof Byte      ? 'b' :
                        value instanceof Character ? 'c' :
                        value instanceof Double    ? 'd' :
                        value instanceof Float     ? 'f' :
                        value instanceof Integer   ? 'i' :
                        value instanceof Long      ? 'l' :
                        value instanceof Short     ? 's' :
                        '\0';
                if (entryType != '\0') {
                    uri.append(entryType);
                    uri.append('.');
                    uri.append(Uri.encode(key));
                    uri.append('=');
                    uri.append(Uri.encode(value.toString()));
                    uri.append(';');
                }
            }
        }
        uri.append("end");
        return uri.toString();
    }
    

    If you can read Java code then it should be pretty clear what is going on here. In any case, extras can be put in the URL and they look something like this:

    .=;
    

    where is one of the following:

    S = String
    B = Boolean
    b = Byte
    c = Character
    d = Double
    f = Float
    i = Integer
    l = Long
    s = Short
    

    Here are a few examples:

    Launch app:

     
    

    Launch app with one String extra called "foo" containing the value "bar123":

     
    

    Launch app with a String extra called "foo" containing the value "bar123" and an Integer extra called "number" containing the value "-567":

     
    

提交回复
热议问题