如何从Web浏览器启动应用程序(不仅仅是Activity)

时间:2013-10-10 12:22:51

标签: android android-intent android-activity

我通过“customapp:// myactivity”

从浏览器调用了我的自定义应用

它运行良好,但是当我启动我的应用程序时。它就像两个不同的应用程序。

我认为浏览器只启动了“myactivity”而不是“customapp”。

我想如果我在“myactivity”上开始“customapp”,那么我可以做我想做的事,但我认为这很荒谬。

有没有很酷的方法来解决这个问题?

  • 下面有更多解释

ex)如果我启动“customapp”并启动“myactivity”并通过“customapp:// myactivity”从网络浏览器调用我的自定义应用程序并长按主页按钮,那么应用程序中有“customapp”,尽管我在“myactivity”。如果我启动其他应用程序并长按主页按钮,则有两个“myactivity”。一个来自“customapp”,另一个来自网络浏览器。

应用程序图标和名称是webbrowser,但有“myactivity”。

抱歉英语不好。

2 个答案:

答案 0 :(得分:0)

我刚刚解决了我的问题。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getIntent().getAction().equals(Intent.ACTION_VIEW)) {
        Intent intent = getPackageManager().getLaunchIntentForPackage("com.company.app");
        intent.setData(getIntent().getData());
        intent.putExtras(getIntent().getExtras());
        startActivity(intent);
        finish();
        return;
    }

    // do something
}

答案 1 :(得分:-1)

请不要使用你自己的定制方案! URI方案是网络全局命名空间。你在世界范围内拥有“anton:”计划吗?没有?然后不要使用它。

一种选择是建立一个网站,并为该网站上的特定URI设置一个intent-filter。例如,这就是Market在其网站上拦截URI的行为:

<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="market.android.com"
                android:path="/search" />
        </intent-filter>

或者,有“意图:”方案。这允许您将几乎任何Intent描述为URI,浏览器在单击时将尝试启动它。要构建这样的方案,最好的方法是只编写代码来构造你想要启动的Intent,然后打印intent.toUri(Intent.URI_INTENT_SCHEME)的结果。

您可以使用具有此意图的操作来查找支持该操作的任何活动。出于安全原因,浏览器会在启动之前自动将BROWSABLE类别添加到intent中;它也会因同样的原因剥离你提供的任何显式组件。

使用此功能的最佳方式是,如果您想确保仅启动您的应用,则使用您自己的作用域操作并使用Intent.setPackage()来表示Intent仅匹配您的应用包。

两者之间的权衡:

  • http URIs要求您拥有自己的域名。用户永远都会得到 在浏览器中显示URI的选项。它有很好的后退 属性,如果你的应用程序没有安装,他们将只是降落 在您的网站上。

  • 意图URI要求您的应用已安装且仅在安装时 Android手机。允许几乎任何意图(但总是有 包含BROWSABLE类别,不支持显式组件)。 它们允许您在没有用户的情况下将启动指向仅限您的应用 可以选择转到浏览器或任何其他应用程序。