android自定义urlscheme..?

我试图创build自己的URLscheme,所以我的Android应用程序可以通过URL调用,但现在我没有成功。

我试图让这个url工作:cedemo://com.cedemo.scan?X = toto

这是我的清单文件的一部分:

<activity android:name=".Gallery1" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.GALLERY" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="cedemo" android:host="com.cedemo.scan" /> </intent-filter> </activity> 

有没有人可以帮助告诉我什么是错的? 此外,如果有人发现什么是错的,有人可以告诉我如何从我的应用程序的Android代码内读取“X”variables?


更新:

更新:我做了行动的修改(如其中一个答案build议),它的工作正常。 事情是,我仍然无法获得urlvariables值。 这是我尝试的代码。

 final Intent intent = getIntent(); final String myScheme=intent.getScheme(); final Bundle myBundle=intent.getExtras(); final boolean inContestKey; if (myBundle != null) { inContestKey=myBundle.containsKey("inContest"); } final Uri myURI=intent.getData(); final String value; if (myURI != null) { value = myURI.getQueryParameter("inContest"); } 

但是,我从所有的function中收到null …我还能做什么?

可能是我应该更好地解释我的软件的上下文:

  1. 我的软件已启动
  2. 我的软件启动,然后浏览器
  3. 用户点击浏览器中的链接,浏览器转到urlscheme,回到带有variables“X”的软件(例如)
  4. 该软件应该读取variables“X”

但在我的情况下: mySchememyBundlemyURI设置为null

有任何想法吗 ?


更新:

我发现答案是你必须在主要活动中这样做。

我认为问题出在你定义的行动上。 有一个“android.intent.action.VIEW”,这是我想你想要的。

 <activity android:name=".Gallery1" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="cedemo" android:host="com.cedemo.scan" /> </intent-filter> </activity> 

试试看,我敢打赌会正确解决。 我只做了这个假设,因为你包含浏览器通常使用的可浏览类别,它不知道你的任何自定义操作。 如果您确实需要GALLERY操作,那么只需创build2个filter即可

 <activity android:name=".Gallery1" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.GALLERY" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="cedemo" android:host="com.cedemo.scan" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="cedemo" android:host="com.cedemo.scan" /> </intent-filter> </activity> 

因此,在您的活动内容中,您可以执行以下操作:

 // Value should be "toto" as in your example String value = getData().getQueryParameter("X"); 

最后我修改了XML元素的顺序 。 具体而言,交换数据和动作行,以便数据在动作开始工作之前。

  <intent-filter> <data android:scheme="myappname" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> 

为了完整性,我在html中的链接是“myappname:// noop”。

还有一件事,我想扔光。 最初它不适合我,因为我在View / Default / Browsable / data之前使用Main / Launcher标签。

一旦我改变了顺序,它开始工作正常。 即最初不工作的代码

 <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="myapp" /> </intent-filter> 

正确的代码顺序

  <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="myapp" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> 

和testingAndroid的方法是非常简单的。 做任何HTML文件插入

 <a href="myapp://http://www.google.com/">test to launch myapp</a> <br /><br /> 

只要打开这个HTML文件,并点击testing…. 🙂