【问题标题】:new thread in Titanium HyperloopTitanium Hyperloop 中的新线程
【发布时间】:2021-03-12 00:38:09
【问题描述】:

我想在我的带有 Hyperloop 的 Appcelerator Titanium 应用中使用 Huawei Push Kit。

    var tokenString = '';
    var Activity = require('android.app.Activity');
    var ActivityToken = require('com.huawei.hms.aaid.HmsInstanceId');

try{    
        const activity = new Activity(Ti.Android.currentActivity);
        tokenString = ActivityToken.getInstance(activity).getToken(appID, "HCM");
        console.log('tokenString', tokenString); 
}
catch (e){
    console.log(e);
}

但我收到错误消息:“MAIN 线程中的操作被禁止”

如何在单独的线程中运行代码?

【问题讨论】:

  • 您可以尝试Automatic Initialization 获取令牌吗? ActivityToken.getInstance(activity).setAutoInitEnabled(true); 使用继承HmsMessageService的自定义类中的onNewToken(String token)方法返回的Token >.

标签: titanium appcelerator-titanium huawei-mobile-services appcelerator-hyperloop hyperloop


【解决方案1】:

你可以尝试Automatic Initialization,通过调用HmsMessaging中的setAutoInitEnabled(boolean enable)方法。

ActivityToken.getInstance(activity).setAutoInitEnabled(true);

配置完成后通过onNewToken()方法返回申请的token。

【讨论】:

  • 非常感谢! “setAutoInitEnabled”有效。但是如何使用“onNewToken”获取令牌?如果我使用:var ActivityToken = require('com.huawei.hms.push.HmsMessaging'); const activity = Ti.Android.currentActivity; ActivityToken.getInstance(activity).setAutoInitEnabled(true); var ActivityGetToken = require('com.huawei.hms.push.HmsMessageService'); ActivityGetToken.onNewToken(); 我收到错误:“ActivityGetToken.onNewToken 不是函数”。如果我使用:Titanium.App.addEventListener('onNewToken', function(e) { console.log('Ok!'); });。它永远不会起作用。
  • 如果我使用:var HmsMessageService = require('com.huawei.hms.push.HmsMessageService'); var MyView = com.huawei.hms.push.HmsMessageService.extend({ onNewToken: function(token) { this.super.onNewToken(token); console.log(token); } }); var customView = new MyView(activity); 我什么也得不到。
  • @Tvik 我不知道 Appcelerator Titanium,关于如何在其上使用 onNewToken() 方法。 :(
  • 我不确定这是否适用于超级循环,因为超级循环在运行时创建东西,您需要一个指向您的类的service(检查medium.com/huawei-developers/…)。把它包装成一个模块不是更容易吗?以现有推送模块(如ti.firebase)为基础,适配华为模块。
  • @shirley 你能告诉我。如何在没有重载方法的情况下找出设备的当前推送令牌。也许有一些属性
【解决方案2】:

在后台线程内包裹代码,因为错误清楚地表明这不能在主线程上运行。主线程、onCreate 等通常不允许耗时调用。

Thread { 
…
    }.run()

【讨论】:

  • 这个问题特定于 Appcelerator Titanum 中的 Hyperloop。这种语法在那里无济于事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多