我试图在注册电子邮件中点击特定URL时启动Android应用程序选择器。我已经看过下面的问题以及其他几个问题,但我仍然没有运气。
Launching Android Application from link or email
我已经在AndroidManifest.xml文件中创建了我的意图,如下所示(我已将我的网站地址放在您看到“.website.org”的位置):
<activity android:name=".MainActivity" android:configChanges="orientation|screenSize">
<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="https"
android:host="*.website.org"
android:path="/" />
</intent-filter>
</activity>
是否有人能够帮助我解决我可能缺少的其他问题,因为目前还没有启动任何内容,只是直接在默认的网络浏览器中加载链接?
答案 0 :(得分:6)
您可以通过应用中的深层链接来实现这一目标。
首先,您需要为传入链接添加意图过滤器。
<强>
<action>
强>指定ACTION_VIEW意图操作,以便可以使用意图过滤器 来自Google搜索。
<强>
<data>
强>添加一个或多个标签,每个标签代表一种URI格式 这解决了活动。至少,标签必须包含 android:scheme属性。
您可以进一步添加更多属性 细化活动接受的URI类型。例如,你 可能有多个活动接受类似的URI,但是哪些 简单地根据路径名称而不同。在这种情况下,使用 android:path属性或其pathPattern或pathPrefix变体 区分系统应为不同的URI打开哪个活动 路径。
<强>
<category>
强>包括BROWSABLE类别。为了达到目的,这是必需的 过滤器可从Web浏览器访问。没有它,点击一个 浏览器中的链接无法解析为您的应用。
还包括DEFAULT 类别。这允许您的应用响应隐式意图。没有 这样,只有在意图指定您的活动时才能启动活动 应用程序组件名称。
我已使用此网址启动我的应用“http://www.example.com/gizmos”
查看我的 Manifest.xml 文件
<activity
android:name="com.example.android.GizmosActivity"
android:label="@string/title_gizmos" >
<intent-filter android:label="@string/filter_view_http_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
<data android:scheme="http"
android:host="www.example.com"
android:pathPrefix="/gizmos" />
<!-- note that the leading "/" is required for pathPrefix-->
</intent-filter>
<intent-filter android:label="@string/filter_view_example_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "example://gizmos” -->
<data android:scheme="example"
android:host="gizmos" />
</intent-filter>
</activity>
请注意,两个意图过滤器仅因 <data>
元素而异。
<intent-filter>
...
<data android:scheme="https" android:host="www.example.com" />
<data android:scheme="app" android:host="open.my.app" />
</intent-filter>
这似乎只支持 https://www.example.com 和 应用://open.my.app 即可。但是,它实际上支持这两个,加上 这些: app://www.example.com 和 https://open.my.app 。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
}
使用adb测试意图过滤器URI的一般语法是:
$ adb shell am start
-W -a android.intent.action.VIEW
-d <URI> <PACKAGE>
例如,以下命令会尝试查看与指定URI关联的目标应用活动。
$ adb shell am start
-W -a android.intent.action.VIEW
-d "example://gizmos" com.example.android
答案 1 :(得分:0)
首先尝试在
中写下Url的整个路径android:host"https://www.google.com"
接下来请检查您是否在Android设备中选择了默认浏览器链接。
删除链接的任何默认值(如果有),然后重试。
答案 2 :(得分:0)
感谢您的回复。最后,我不得不将我的意图改为下面,它有了预期的结果。当我单击我的意图中指定的URL时,弹出应用程序选择器,允许我在我的应用程序中加载链接。
正如我所做的任何人一样努力的信息,你不需要从应用程序选择器启动的传入意图中读取数据,你需要的只是AndroidManifest文件中的以下内容。
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host=".website.com" />
</intent-filter>
全部谢谢。