java - 拦截 url 以启动应用程序

标签 java android

我正在尝试拦截 URL,以便在用户访问该 URL 时打开我的应用程序。我在相关问题 https://stackoverflow.com/a/2958870 中关注此答案

我在 AndroidManifest.xml 中添加了以下内容

   <activity
        android:name="com.myapp.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <data android:scheme="http" android:host="myapp.com"/>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

并且在MainActivity.javaonCreate中有以下内容

Uri data = getIntent().getData();
//String scheme = data.getScheme(); 
//String host = data.getHost(); 
if (data == null)
    Log.d("Data is null", "");
else
    Log.d("Data is not null", "");

当我在模拟器中启动应用程序时,我注意到出现了“数据为空”调试消息。我必须注释掉 schemehost 因为这导致我的应用程序在加载时失败,我猜原因是因为 data为空。

我错过了什么或者做错了什么吗?

编辑:我尝试像这样分割 Intent 过滤器:

    <activity
        android:name="com.myapp.MainActivity"
        android:label="@string/app_name" >
        <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:host="myapp.com" android:scheme="http" />
        </intent-filter>
    </activity>

此外,当我只有一个 Intent 过滤器(如下)时,当我在 android studio 中按 run 时,我的应用程序甚至不会在模拟器上启动。

    <activity
        android:name="com.myapp.MainActivity"
        android:label="@string/app_name" >
        <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:host="myapp.com" android:scheme="http" />
        </intent-filter>
    </activity>

最佳答案

试试这个 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:host="myapp.com" android:scheme="http" />
</intent-filter>

这是一个隐含的 Intent ,但我尝试过,它对我有用。我认为您需要 android.intent.category.BROWSABLE 类别。

关于java - 拦截 url 以启动应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20504382/

相关文章:

java - 我可以在setcontentview android之前以编程方式创建ImageView吗

javascript - 将js回调函数作为参数传递给Java addJavascriptInterface

java.sql.SQLException : Parameter index out of range (1 > number of parameters, 为 0)

java - 在 Java 方法中将未知类型的对象作为参数传递

java - 订阅 Microsoft Graph 推送通知时的状态代码 429

java - 在 Java 中编译循环

java - Axis2 更改默认服务端口

java - 如何将目录上传到 FTP?

java - list 中的类集成 : application stopped

android - Android应用程序中的 Paypal 帐户实现