如何监听自定义URI

时间:2010-08-12 19:53:47

标签: android uri

我正在处理一个有自己的URI前缀的应用程序。 (dchub://在这种情况下)

全部搜索并阅读了很多,但我有点困惑。

当有人点击浏览器中以dchub://开头的链接时,是否可以启动我的应用程序?

到目前为止,在你的应用程序中打开浏览器时发现了很多例子,但这不是我想要的。

更新

非常感谢,我已经想到了,现在我有点陷入下一部分。

Uri data = getIntent().getData(); 
if (data.equals(null)) { } else { 
    String scheme = data.getScheme(); 
    String host = data.getHost(); 
    int port = data.getPort(); 
}

如果我正常启动应用程序,我会得到一些nullpointerexception,如果我从网页打开它会正常工作。所以我想包括一些检查nullvalue但是没有解决它。任何建议我如何才能通过选择它来启动应用程序?

3 个答案:

答案 0 :(得分:26)

要在Android应用程序中注册协议,请在AndroidManifest.xml中添加一个额外的块。

<manifest>
 <application>
   <activity>
           <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="dchub"/>
            </intent-filter>
   </activity>
 </application>
</manifest>

答案 1 :(得分:10)

不要使用data.equals(null)。那肯定会失败,你不能在null对象上调用方法,因此就是NPE。

为什么emtpy代码块?在我看来,这更漂亮:

if(data != null){
    // code here
}

答案 2 :(得分:-1)

试试这段代码:

try {
    Uri data = getIntent().getData();
    if (data.equals(null)) { 
    } else { 
        String scheme = data.getScheme();
        String host = data.getHost();
        int port = data.getPort(); 
        //type what u want
        tv.setText("any thing");
     }      
} catch (NullPointerException e) {
      // TODO: handle exception
  tv.setText("Null");
}