使用URL启动应用

时间:2010-06-14 16:28:47

标签: android android-intent

我已经阅读了关于android中的意图,但这里是我的问题。我想通过点击网络浏览器中的链接在我的Android手机上启动应用程序。例: 如果链接是“mycam:// http://camcorder.com”,则“mycam://”可以作为某种“标记”来启动我的应用,但我想传递“http://camcorder.com”作为开始时该应用程序的字符串。

请帮忙!

谢谢!

2 个答案:

答案 0 :(得分:5)

浏览器应用源代码中有一个方法:

public boolean shouldOverrideUrlLoading(WebView view, String url) { ... }

点击一个网址后,它还没有开始加载:

  1. 将网址转换为意图

    Intent intent;
    
    // perform generic parsing of the URI to turn it into an Intent.
    try {
        intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
    } catch (URISyntaxException ex) {
        Log.w("Browser", "Bad URI " + url + ": " + ex.getMessage());
        return false;
    }
    
  2. 如果它不是以market://(或某些预定义的方案)开头,请尝试startActivityIfNeeded()

    intent.addCategory(Intent.CATEGORY_BROWSABLE);
    intent.setComponent(null);
    try {
        if (startActivityIfNeeded(intent, -1)) {
            return true;
        }
    } catch (ActivityNotFoundException ex) {
        // ignore the error. If no application can handle the URL,
        // eg about:blank, assume the browser can handle it.
    }
    
  3. 这是非常有用的信息!我用简单的代码重新演绎这种情况:

    Intent intent = Intent.parseUri("mycam://http://camcorder.com", Intent.URI_INTENT_SCHEME);
    intent.addCategory(Intent.CATEGORY_BROWSABLE);
    intent.setComponent(null);
    System.out.println(intent);
    

    结果将为我提供使用intent-filter编写活动的线索:

            <activity android:name=".MyCamActivity" 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:scheme="mycam" />
                </intent-filter>
            </activity>
    

    PS。不要忘记 android.intent.category.DEFAUL

    最后,您的活动可以通过mycam:// scheme

    调用

答案 1 :(得分:4)

mycam:// http://camcorder.com不是有效的URI,如果两个应用选择相同的应用程序,那么编制方案会有点可怕。最好将您的活动注册为特定URI的处理程序(例如http://www.example.com/camcorder,当然替换您自己的域)。您可以使用<data> tag in your <intent-filter> tag in the AndroidManifest.xml执行此操作。当用户点击该链接时,它们将被带到您的应用程序。这样,您还可以在网页上放置一个真实的页面,指导人们安装您的应用程序或其他任何内容。