我试图创建自己的网址方案,以便我的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
了所有的功能......我还能做什么?
可能我应该更好地解释我的软件的上下文:
但在我的情况: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)
最终为我解决的问题是改变了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".
归档时间: |
|
查看次数: |
51371 次 |
最近记录: |