android intent-filter数据pathprefix在url中不存在时捕获

时间:2014-08-06 08:49:18

标签: android android-intent intentfilter

我想捕获网站网址的视图操作以及我网站中的特定路径。

http://examplesite.com/
http://examplesite.com/detail/nameOfProduct

我希望主要活动对第一个网址开放,所以我使用了:

<data
   android:host="examplesite.com"
   android:scheme="http"/>

并且对于第二个网址,我想要打开详细活动,所以我把:

<data
   android:host="examplesite.com"
   android:pathPrefix="/detail"
   android:scheme="http"/>

现在的问题是,在意图中调用第一个URL时,两个活动都显示给用户选择,而我只想显示主要活动。我怎么解决这个问题。我做错了什么?

3 个答案:

答案 0 :(得分:0)

您可以尝试这种替代方式, 为appindexing创建一个单独的活动,以便为该特定活动添加意图过滤器,因此只有此活动才会指向启动到您的应用中。

<activity
            android:name=".BeginApp">

            <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="http"
                       android:host="www.example.site"
                       android:pathPrefix="/"
                       />
              </intent-filter>  
        </activity>

登陆此活动后

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.balankpage);        


        Uri data = getIntent().getData();

        system.out.println("DATA: "+data);
        if(data!=null)
        {
            String tmpData = data.toString();
            String hostName = data.getHost();

        if(tmpData.equalIgnoreCase("http://www.examplesite.com/"))
       {
          LaunchActivity1();
          finish();
       }
      else if(tmpData.equalIgnoreCase("http://examplesite.com/detail/nameOfProduct"))
      {
         LaunchActivity2();
         finish();
      }
}

注意:您也可以使用正则表达式拆分uridata(收到的网址)并完美匹配,并根据您的需要制作条件。

答案 1 :(得分:0)

您遇到此问题的原因是第一个意图过滤器与http://examplesite.com*匹配。

使用pathPrefix =&#34; /&#34;不会像以前那样工作:http://examplesite.com/*


现在问题的解决方案是替换它:

<data
   android:host="examplesite.com"
   android:scheme="http"/>

使用:

    <data android:scheme="http"
          android:host="examplesite.com"
          android:pathPattern="/"/>

答案 2 :(得分:0)

我建议您只注册主要活动并在那里解析网址,如果它导致/详细信息,则启动详细信息活动