Java 使用深度链接启动Android应用程序

Java 使用深度链接启动Android应用程序,java,android,android-activity,deep-linking,Java,Android,Android Activity,Deep Linking,我正在尝试使用深度链接启动我的Android应用程序。基本上,用户将收到带有链接的电子邮件,当用户单击链接时,应用程序应启动。 我知道如何做基本的深度链接,但是,我想启动实际的应用程序,而不仅仅是一个特定的活动。我的深度链接方案类似于“mydeeplinking”,在电子邮件中类似于“mydeeplinking://”。 我正在寻找类似iOS深度链接的东西,它可以启动整个应用程序。 任何帮助都将不胜感激。 提前谢谢 基本上,你所需要做的就是使用intent filter告诉安卓应该将什么类型的数

我正在尝试使用深度链接启动我的Android应用程序。基本上,用户将收到带有链接的电子邮件,当用户单击链接时,应用程序应启动。 我知道如何做基本的深度链接,但是,我想启动实际的应用程序,而不仅仅是一个特定的活动。我的深度链接方案类似于“mydeeplinking”,在电子邮件中类似于“mydeeplinking://”。 我正在寻找类似iOS深度链接的东西,它可以启动整个应用程序。 任何帮助都将不胜感激。
提前谢谢

基本上,你所需要做的就是使用
intent filter
告诉安卓应该将什么类型的数据路由到你的应用程序

AndroidManifest.xml:

<activity android:name="com.example.MainActivity" >

    <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" />
        <data android:scheme="https" />

        <data android:host="www.example.com" />

        <data android:path="/" />
        <data android:path="/map" />

    </intent-filter>

</activity>

Firebase大大增强了深度链接。开始有点困难,但效果很好!检查这个例子

将这种深度链接与iOS进行比较可能会产生混淆,因为它们的工作方式不同。安卓一直能够将信息从一个应用程序推送到另一个应用程序,甚至可以从网络上获取信息,这正是iOS所做的。这本身并不是深度链接。它可以走得更远——它意味着在用户创建个人资料(或类似的东西)之前就可以提供个性化的应用程序体验。还需要注意的是,深度链接即使在安装应用程序时也会保留这些个性化信息,并使用这些信息打开应用程序!这不仅仅是一个意图!您的问题与URI方案有关。如果你仍然同意你在寻找深度链接,也许会有所帮助

如果您只是想启动一个应用程序(无论是否已安装在用户设备上),那么意向过滤器是一种方法,意向可以传递信息。如果你想让用户在应用程序中使用活动而不安装,android即时应用程序是正确的选择。如果你正在寻找一种方法,将信息从用户的电子邮件或互联网“深入”传递到你的应用程序,建议使用深度链接

意图过滤器可用于从网页打开某些应用程序。当选择可以在浏览器或应用程序(或多个应用程序)中打开的链接时,手机屏幕底部会弹出一个框,询问用户对默认链接的偏好,以便在以后单击时打开。(见下图)可能需要修改网站的javascript以检测用户的操作系统并发送正确的URL调用。iOS的工作原理有点不同

下面是如何使用意图过滤器。它有一些额外的代码,您可能会发现它们很有用

public void startNewActivity(Context context, String packageName) {
    Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
    if (intent == null) {
        // brings user to the market if app is not installed already
        intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("market://details?id=" + packageName));
    }
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  // opens a new "page" instead of overlapping the same app
    context.startActivity(intent);
}

如果需要同时传递数据,请使用
intent.putExtra(“名称”、“值”) 

您应该启动发射器活动,好像用户点击ICON正在寻找的是意图过滤器,请考虑接受一个答案,如果它帮助了您,感谢您的贡献和有用的信息。如果两个APK共享相同的Delelink模式主机路径会发生什么?如果存在重叠,将弹出哪个活动?Android将询问用户希望使用哪个应用程序进行处理。要么一次,要么永远。
public void startNewActivity(Context context, String packageName) {
    Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
    if (intent == null) {
        // brings user to the market if app is not installed already
        intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("market://details?id=" + packageName));
    }
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  // opens a new "page" instead of overlapping the same app
    context.startActivity(intent);
}