从网址

时间:2017-12-19 12:50:06

标签: android url android-intent linker

我试图在注册电子邮件中点击特定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>

是否有人能够帮助我解决我可能缺少的其他问题,因为目前还没有启动任何内容,只是直接在默认的网络浏览器中加载链接?

3 个答案:

答案 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>

全部谢谢。