Rel*_*lla 52 java browser android
因此,我想创建一个Android应用程序,以便在Android操作系统中注册(或者只是在系统启动时启动),当手机用户点击网页浏览器内网页上的特殊按钮时:
<a href="myapp://mysettings">Foo</a>
Run Code Online (Sandbox Code Playgroud)
我的应用程序将弹出并使用该URL中发送的参数运行.
那我该怎么做呢?
我需要一个代码教程!
9re*_*9re 55
首先,为了能够通过浏览器/邮件中的自定义方案'myapp'链接启动您的应用程序,请按如下方式设置intent过滤器.
<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>
Run Code Online (Sandbox Code Playgroud)
并解析你的链接中的查询myapp:// someaction /?var = str&varr = string
(代码过度简化,没有错误检查.)
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
}
Run Code Online (Sandbox Code Playgroud)
[编辑]如果您使用自定义方案启动您的应用程序,其中一个问题是:其他应用程序中的WebView可能无法理解您的自定义方案.这可能会导致显示404页面的浏览器与自定义方案的链接.
hac*_*bod 48
您需要通过W3C遵循URI的标准规则等,这基本上意味着:不要这样做.
Android定义了用于描述通用Intent的Uri语法.Intent上有一些方法可以转换为此表示形式,例如:http://developer.android.com/reference/android/content/Intent.html#toUri(int)
因此,执行此操作的方法是使用常规工具在清单中描述您要使用特定组件处理的意图类型,尤其是在您自己的命名空间中定义操作名称(com.mycompany.myapp.action) .DO_SOMETHING或其他).然后,您可以创建与您的组件匹配的Intent,并使用Intent.toUri()来获取此URI的表示形式.这可以放在您的链接中,然后在按下时查找处理的内容,从而找到您的应用程序.注意要像这样从浏览器启动,组件必须处理BROWSABLE类别.(您不需要在链接中放入Intent,浏览器会自动为您添加此内容.)
最后,您可能希望使用以下内容为应用程序设置intent的包:http://developer.android.com/reference/android/content/Intent.html#setPackage(java.lang.String)
这是平台中的一个较新功能,它允许您将链接意图仅指向您的应用程序,以便其他应用程序无法拦截和处理它们.
总结:阅读关于意图和意图过滤器的常规文档(例如NotePad教程,虽然你不会在这里使用内容:URI,可能只是自定义操作)并让你的应用程序以这种方式工作.然后,您可以创建浏览器链接以相同的方式启动您的应用程序,前提是您的intent-filter处理BROWSABLE类别.
Jas*_*den 44
这是我对追逐贡献的切入.
在要在清单中加载的活动中创建一个intent过滤器,如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
您的网页网址如下所示:
intent:#Intent;action=com.bubblebeats.MY_CUSTOM_ACTION;end
Run Code Online (Sandbox Code Playgroud)
从浏览器启动apk的最基本的HTML代码如下所示:
<body>
<a href="intent:#Intent;action=com.bubblebeats.MY_CUSTOM_ACTION;end">click to load apk</a>
</body>
Run Code Online (Sandbox Code Playgroud)
向您的意图添加变量
您可以在Android代码中生成URI,如下所示:
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));
Run Code Online (Sandbox Code Playgroud)
这会产生这个:
04-13 09:47:30.742: DEBUG/ezpz(9098): intent:#Intent;action=com.bubblebeats.MY_CUSTOM_ACTION;S.some_variable=123456;end
Run Code Online (Sandbox Code Playgroud)
你只想要这个部分:
intent:#Intent;action=com.bubblebeats.MY_CUSTOM_ACTION;S.some_variable=123456;end
Run Code Online (Sandbox Code Playgroud)
仔细看看这里发生的事情,你可以看到如何跳过代码步骤并自己手动创建这些URI.
特别是这部分:
S.some_variable=123456
Run Code Online (Sandbox Code Playgroud)
因为hackbod从来没有给我们代码示例,所以在我开始工作之后,我只想分享我的.
首先,您需要在清单文件中定义自定义操作:
<activity
android:name=".activity.MainActivity"
android:label="@string/app_name_full">
<intent-filter>
<action android:name="com.yourpackage.action.OPEN_VIEW"></action>
<category android:name="android.intent.category.DEFAULT"></category>
<category android:name="android.intent.category.BROWSABLE"></category>
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
然后,对于您网站上的内容,您需要从intent生成URI.将以下代码放入您的Activity中(生成链接后,可以删除此代码):
Intent i = new Intent();
i.setAction("com.yourpackage.action.OPEN_VIEW");
i.setPackage("com.yourpackage");
i.putExtra("myextra","anystring");
Log.d(getClass().getSimpleName(), i.toUri(Intent.URI_INTENT_SCHEME));
Run Code Online (Sandbox Code Playgroud)
要接收额外内容,请将以下内容放入您的活动中,以便能够接收自定义操作(如清单中所定义):
final Intent intent = getIntent();
final String action = intent.getAction();
if ("com.yourpackage.action.OPEN_VIEW".equals(action)) {
Log.i(getClass().getSimpleName(), "EXTRA: "+intent.getExtras().getString("myextra"));
}
Run Code Online (Sandbox Code Playgroud)
在您的网站上(这是以前生成的链接):
<a href="intent:#Intent;action=com.yourpackage.action.OPEN_VIEW;package=com.yourpackage;S.myextra=anystring;end">Open App with extra</a>
Run Code Online (Sandbox Code Playgroud)
希望能帮助别人更好地理解.如果我出错了,请纠正我.
| 归档时间: |
|
| 查看次数: |
50969 次 |
| 最近记录: |