android自定义网址方案..?

Fab*_*ien 41 url android

我试图创建自己的网址方案,以便我的Android应用程序可以通过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>
Run Code Online (Sandbox Code Playgroud)

有没有人可以帮我告诉我什么是错的?此外,如果有人发现错误,有人可以告诉我如何从我的应用程序的Android代码中读取"X"变量?


更新:

更新:我做了动作的修改(正如其中一个答案中所建议的那样)并且它运行良好.问题是我仍然无法获取url变量值.这是我试过的代码.

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");
}
Run Code Online (Sandbox Code Playgroud)

但我收到null了所有的功能......我还能做什么?

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

  1. 我的软件已启动
  2. 我的软件然后启动浏览器
  3. 用户单击浏览器中的链接,浏览器转到url方案,返回到带有变量"X"的软件(例如)
  4. 软件应该读取变量"X"

但在我的情况:myScheme,myBundle,myURI设置为null.

有任何想法吗 ?


更新:

我发现答案是你必须参加主要活动才能做到这一点.

Gre*_*lli 43

我认为问题在于你定义的Action.有一个"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>
Run Code Online (Sandbox Code Playgroud)

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

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


leo*_*ntx 8

最终为我解决的问题是改变了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>
Run Code Online (Sandbox Code Playgroud)

为了完整起见,我在html中的链接是"myappname:// noop".