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

Titanium Android深度链接:Ti SDK6.2.0+中Intent.getData()返回null

解决Ti SDK 6.2.0+ Android深度链接getData()返回null的问题

我之前也碰到过这个棘手的问题——在Ti SDK 6.2.0及更高版本的Android应用里,通过深度链接唤起应用后,调用Ti.Android.currentActivity.getIntent().getData()总是返回null,但降级到6.1.2就一切正常。这其实是SDK版本更新后Activity启动逻辑的变化导致的,下面给你详细的解决方案:

问题根源

从Ti SDK 6.2.0开始,Appcelerator调整了Android应用的启动机制:当通过深度链接唤起应用时,新的Intent会通过onNewIntent()方法传递,而不会直接覆盖当前Activity的原始Intent。如果你还是在页面open事件里直接读取currentActivity.getIntent(),拿到的只会是应用首次启动时的空Intent,自然返回null。

修复代码方案

你需要监听Activity的newintent事件来获取最新的Intent数据,同时保留首次启动时的Intent读取逻辑,具体修改如下:

1. 更新alloy.js中的方法

Alloy.Globals.getDeepLinkURL = function(intent) {
    // 优先使用传入的新Intent,没有则 fallback 到当前Activity的初始Intent
    const targetIntent = intent || Ti.Android.currentActivity.getIntent();
    Alloy.Globals.deepLinkURLAndroid = targetIntent.getData();

    console.log("Alloy.Globals.deepLinkURLAndroid:", Alloy.Globals.deepLinkURLAndroid);
    console.log("当前处理的Intent:", targetIntent);
};

// 针对Android监听newintent事件,处理后续唤起的深度链接
if (OS_ANDROID) {
    Ti.Android.currentActivity.addEventListener('newintent', function(e) {
        // 传入最新的Intent到处理方法中
        Alloy.Globals.getDeepLinkURL(e.intent);
        // 可选:更新当前Activity的Intent,确保后续调用getIntent()也能拿到最新数据
        Ti.Android.currentActivity.setIntent(e.intent);
    });
}

2. 修改index.js的open事件逻辑

$.index.addEventListener('open', function(){
    if(OS_ANDROID){
        // 应用首次启动时,读取初始Intent的深度链接数据
        Alloy.Globals.getDeepLinkURL();
    }
});

验证步骤

  1. 用修改后的代码重新编译应用,安装到Android设备
  2. 在浏览器中访问你的深度链接(比如appname://videoURL,注意替换成你实际的Scheme)
  3. 查看应用日志,此时getData()应该能正确返回对应的深度链接URL了

额外提示

如果你的应用支持多次通过深度链接唤起,一定要处理newintent事件,否则后续每次唤起都拿不到最新的链接;调用setIntent(e.intent)是为了让后续调用currentActivity.getIntent()时也能拿到最新的Intent数据,避免重复处理逻辑。

内容的提问来源于stack exchange,提问作者Miti shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:13:23