You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Android地点搜索APP的链接唤起与指定地点页跳转?

嘿,这个需求其实和Clash Royale的跳转机制原理一致,咱们可以通过Deep Linking(深度链接)或者进阶的App Linking(应用链接)来实现,下面给你一步步拆解实现思路:

一、先配置Manifest,让应用能识别自定义链接

首先要在负责展示地点详情的Activity里添加intent-filter,告诉Android系统:这个Activity可以处理咱们指定格式的链接。比如我们自定义一个专属scheme(类似myplaces://),用来标识咱们的应用:

<activity android:name=".ui.PlaceDetailActivity">
    <!-- 原有配置保持不变 -->
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        
        <!-- 自定义链接规则:匹配 myplaces://detail/place/[地点ID] 格式 -->
        <data
            android:scheme="myplaces"
            android:host="detail"
            android:pathPattern="/place/.*" />
    </intent-filter>
</activity>

这里的pathPattern用来匹配带地点ID的路径,比如myplaces://detail/place/123这样的链接,系统就会把它交给PlaceDetailActivity处理。

二、在Activity里解析链接参数,跳转对应地点页面

接下来要在PlaceDetailActivity里读取链接里的地点ID,然后加载对应的详情内容。注意:如果应用已经在后台运行,系统会调用onNewIntent而不是重新创建Activity,所以两个方法都要处理:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_place_detail)
    // 处理启动时的链接
    handleDeepLink(intent)
}

override fun onNewIntent(intent: Intent?) {
    super.onNewIntent(intent)
    // 处理后台唤起时的链接
    intent?.let { handleDeepLink(it) }
}

private fun handleDeepLink(intent: Intent) {
    val uri = intent.data ?: return
    
    // 从链接路径里提取地点ID,比如 uri.path 是 "/place/123",取最后一段
    val placeId = uri.pathSegments.lastOrNull()
    placeId?.let { id ->
        // 这里写你的业务逻辑:根据ID获取地点数据、渲染页面
        loadPlaceDetail(id)
    } ?: run {
        // 如果ID无效,给用户友好提示
        Toast.makeText(this, "无效的地点链接", Toast.LENGTH_SHORT).show()
        finish()
    }
}

如果是Java项目,逻辑完全一致,只是语法不同,你可以对应转换。

三、生成可分享的链接

现在你可以在分享按钮的点击事件里,根据当前地点的ID生成对应的链接:

// 假设当前地点ID是 currentPlaceId
val shareLink = "myplaces://detail/place/$currentPlaceId"

val shareIntent = Intent(Intent.ACTION_SEND).apply {
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, "推荐你一个好去处:$shareLink")
}

startActivity(Intent.createChooser(shareIntent, "分享地点"))

这样用户点击分享后,就能把带地点ID的链接发给好友了。

四、进阶:实现Https链接直接唤起应用(类似Clash Royale的无缝体验)

上面的自定义scheme已经能满足需求,但如果想让用户点击普通的Https链接(比如https://yourdomain.com/place/123)也能直接唤起应用(没装的话跳网页展示地点),就需要配置App Links:

  1. 先修改Manifest里的intent-filter,换成Https scheme和你的域名:
<data
    android:scheme="https"
    android:host="yourdomain.com"
    android:pathPattern="/place/.*" />
  1. 在你的域名服务器上放置一个验证文件:
    在域名的.well-known目录下创建assetlinks.json文件,内容如下(替换成你的应用包名和签名SHA256指纹):
[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.yourcompany.myplaces",
    "sha256_cert_fingerprints": ["你的应用签名的SHA256指纹"]
  }
}]

你可以通过Android Studio的Gradle > Tasks > android > signingReport查看SHA256指纹,或者用keytool命令生成。

配置完成后,用户点击https://yourdomain.com/place/123时,系统会直接唤起你的应用,没装的话就跳对应的网页地址。

五、测试小技巧

可以用adb命令快速测试链接是否能正常唤起应用:

adb shell am start -W -a android.intent.action.VIEW -d "myplaces://detail/place/123" com.yourcompany.myplaces

内容的提问来源于stack exchange,提问作者A.khaled

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:00:39