0

我通过“customapp://myactivity”从浏览器调用了我的自定义应用程序

它工作得很好,但是当我启动我的应用程序时。它就像两个不同的应用程序一样工作。

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

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

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

  • 更多解释在下面

例如)如果我启动“customapp”并启动“myactivity”并通过“customapp://myactivity”从网络浏览器调用我的自定义应用程序并长按主页按钮,即使我在“myactivity”中,应用程序中也会有“customapp” . 如果我启动其他应用程序并长按主页按钮,则有两个“myactivity”。一个来自“customapp”,一个来自网络浏览器。

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

抱歉英语不好。

4

2 回答 2

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
}
于 2013-10-11T07:55:13.003 回答
-1

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

一种选择是拥有一个网站,并为该网站上的特定 URI 设置一个意图过滤器。例如,这是 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,浏览器将在单击时尝试启动该 URI。要构建这样的方案,最好的方法是编写代码来构建您要启动的 Intent,然后打印 intent.toUri(Intent.URI_INTENT_SCHEME) 的结果。

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

如果您想确保它只启动您的应用程序,使用它的最佳方法是使用您自己的作用域操作并使用 Intent.setPackage() 表示 Intent 将仅匹配您的应用程序包。

两者之间的取舍:

  • http URI 要求您拥有自己的域。用户将始终可以选择在浏览器中显示 URI。它有非常好的后备属性,如果你的应用没有安装,它们只会登陆你的网站。

  • 意图 URI 要求您的应用程序已经安装并且仅在 Android 手机上。几乎允许任何意图(但始终包含 BROWSABLE 类别并且不支持显式组件)。它们允许您仅将启动定向到您的应用程序,而用户无需选择转到浏览器或任何其他应用程序。

于 2013-10-10T12:27:26.867 回答