我正在尝试拦截网址,以便在用户访问网址时打开我的应用程序。我在相关问题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>
在onCreate
的{{1}}
MainActivity.java
当我在模拟器中启动应用程序时,我注意到“Data is null”调试消息即将到来。我必须将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", "");
和scheme
注释掉,因为这导致我的应用程序在加载时失败,我猜的原因是因为host
为空。
我错过了什么或做错了什么?
修改:我尝试过像这样拆分intent-filter:
data
另外,当我只有一个intent-filter(下面)时,当我在android studio中按 <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>
时,我的应用程序甚至都没有在模拟器上启动。
run
答案 0 :(得分:1)
请尝试使用此意图过滤器:
<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>
这是一个隐含的意图,但我尝试了它,它对我有用。我认为您需要android.intent.category.BROWSABLE
类别。