首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何注册一些URL名称空间(myapp://app.start/),以便在Android操作系统中通过在浏览器中调用URL来访问您的程序?

如何注册一些URL名称空间(myapp://app.start/),以便在Android操作系统中通过在浏览器中调用URL来访问您的程序?
EN

Stack Overflow用户
提问于 2010-03-12 10:05:43
回答 4查看 54.3K关注 0票数 54

所以我想创建一个Android应用程序,这样它就会在android操作系统中的某个地方注册(或者只在系统启动时启动),并且当手机用户在web浏览器中点击网页上的特殊按钮时:

代码语言:javascript
运行
复制
 <a href="myapp://mysettings">Foo</a> 

我的应用程序将弹出并使用该URL中发送的参数运行。

那么我该怎么做呢?

我需要一个具有代码的教程!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-12 12:12:42

您需要通过W3C等遵循URI的标准规则,这基本上意味着:不要这样做。

Android定义了用于描述通用意图的Uri语法。有一些关于意图的方法可用于在此表示形式之间进行转换,例如:http://developer.android.com/reference/android/content/Intent.html#toUri(int)

因此,要做到这一点,方法是在清单中使用常规工具来描述您将处理特定组件的意图的类型,特别是在您自己的命名空间(com.mycompany.myapp.action.DO_SOMETHING或其他任何名称空间)中定义一个操作名称。然后,您可以创建一个与您的组件匹配的意图,并使用Intent.toUri()获取该意图的URI表示。这可以放在你的链接中,然后当按下时将查找处理和的东西,从而找到你的应用程序。注要像这样从浏览器启动,组件的必须处理BROWSABLE类别。(你不需要在你放入链接的意图中包含这些内容,浏览器会自动为你添加这些内容。)

最后,您可能需要使用以下命令设置应用程序的意图包:http://developer.android.com/reference/android/content/Intent.html#setPackage(java.lang.String)

这是该平台中的一个新功能,它允许您将意图直接链接到您的应用程序,以便其他应用程序无法拦截和处理它们。

总之:阅读有关意图和意图过滤器的常规文档(例如NotePad教程,尽管您不会在这里使用content: URI,可能只是自定义操作),并让您的应用程序以这种方式工作。然后,您可以创建一个浏览器链接,以同样的方式启动您的应用程序,前提是您的intent-filter处理BROWSABLE类别。

票数 48
EN

Stack Overflow用户

发布于 2010-11-03 16:51:40

首先,为了能够从浏览器/邮件中带有自定义方案'myapp‘的链接启动你的应用程序,如下所示设置意图过滤器。

代码语言:javascript
运行
复制
<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>

并解析链接myapp://someaction/?var=str&varr=string中的查询

(代码过于简化,没有错误检查。)

代码语言:javascript
运行
复制
Intent intent = getIntent();
// check if this intent is started via custom scheme link
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
  Uri uri = intent.getData();
  // may be some test here with your custom uri
  String var = uri.getQueryParameter("var"); // "str" is set
  String varr = uri.getQueryParameter("varr"); // "string" is set
}

编辑如果您使用自定义方案启动您的应用程序,其中一个问题是:其他应用程序中的WebView可能无法理解您的自定义方案。这可能导致针对具有自定义方案的链接的那些浏览器显示404页面。

票数 57
EN

Stack Overflow用户

发布于 2011-04-13 22:53:54

这是我对chase贡献的提成。

在要在清单中加载的活动中创建意图筛选器,如下所示:

代码语言:javascript
运行
复制
<intent-filter>
    <action android:name="com.bubblebeats.MY_CUSTOM_ACTION" />
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>

您的网页URL将如下所示:

代码语言:javascript
运行
复制
intent:#Intent;action=com.bubblebeats.MY_CUSTOM_ACTION;end

从浏览器启动apk的最基本的HTML代码如下所示:

代码语言:javascript
运行
复制
<body>
    <a href="intent:#Intent;action=com.bubblebeats.MY_CUSTOM_ACTION;end">click to load apk</a>
</body>

用于向intent添加变量的

您可以在Android代码中生成URI,如下所示:

代码语言:javascript
运行
复制
Intent i = new Intent();

i.setAction("com.bubblebeats.MY_CUSTOM_ACTION");
i.putExtra("some_variable", "123456");

Log.d("ezpz", i.toUri(Intent.URI_INTENT_SCHEME));

这将产生以下结果:

代码语言:javascript
运行
复制
04-13 09:47:30.742: DEBUG/ezpz(9098): intent:#Intent;action=com.bubblebeats.MY_CUSTOM_ACTION;S.some_variable=123456;end

你只需要这一部分:

代码语言:javascript
运行
复制
intent:#Intent;action=com.bubblebeats.MY_CUSTOM_ACTION;S.some_variable=123456;end

仔细看看这里发生了什么,您就可以看到如何跳过代码步骤,自己手动创建这些URI。

尤其是这一部分:

代码语言:javascript
运行
复制
S.some_variable=123456
票数 45
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2430045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档