意图锚语法描述

我正在尝试使用意图锚来启动我的应用程序,如此处所述。 我能够使用这种语法启动我的应用程序,

Launch my app 

但我不知道许多不同的元素是什么意思。

基于意图的URI的基本语法如下:

意图:

 HOST/URI-path // Optional host #Intent; package=[string]; action=[string]; category=[string]; component=[string]; scheme=[string]; end; 
  1. 每个细分都意味着什么(所以我知道如何最好地利用它们)
  2. 我如何/在哪里可以包含任何额外的数据(即我自己的参数)

以下是来自Intent类的toUri()方法:

 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(); } 

如果您可以阅读Java代码,那么应该非常清楚这里发生了什么。 在任何情况下,额外的东西都可以放在URL中,它们看起来像这样:

 .=; 

其中是以下之一:

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

这里有一些例子:

启动应用:

  

使用一个名为“foo”的字符串额外启动app,其中包含值“bar123”:

  

使用包含值“bar123”的名为“foo”的字符串extra和使用包含值“-567”的名为“number”的Integer extra启动应用程序: