我通过“customapp:// myactivity”
从浏览器调用了我的自定义应用它运行良好,但是当我启动我的应用程序时。它就像两个不同的应用程序。
我认为浏览器只启动了“myactivity”而不是“customapp”。
我想如果我在“myactivity”上开始“customapp”,那么我可以做我想做的事,但我认为这很荒谬。
有没有很酷的方法来解决这个问题?
ex)如果我启动“customapp”并启动“myactivity”并通过“customapp:// myactivity”从网络浏览器调用我的自定义应用程序并长按主页按钮,那么应用程序中有“customapp”,尽管我在“myactivity”。如果我启动其他应用程序并长按主页按钮,则有两个“myactivity”。一个来自“customapp”,另一个来自网络浏览器。
应用程序图标和名称是webbrowser,但有“myactivity”。
抱歉英语不好。
答案 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类别,不支持显式组件)。 它们允许您在没有用户的情况下将启动指向仅限您的应用 可以选择转到浏览器或任何其他应用程序。