我有一个应用程序,我想从联系人中选择一个人,然后向该人发送文本。对于第一个用户,它可以按预期工作,但是在此之后,选择联系人后,该应用程序将永远不会收到控制。我已将问题隔离到Nativescript-phone插件。如果仅调用phone.sms()发送文本,然后再调用contacts.getContact(),则会出现问题。我在Android和iOS上都看到了这一点。
我创建了一个示例应用程序,该应用程序在https://github.com/dlcole/contactTester处演示了该问题。该示例应用程序仅适用于Android。我已经花了几天时间,并欢迎有任何见解。
编辑4/21/2020:
我花了更多时间在此上,可以看到发生了什么。这两个插件具有相同的事件处理程序和相同的请求代码:
本地电话:
var SEND_SMS = 1001;
activity.onActivityResult = function(requestCode, resultCode, data) {
本地联系人:
var PICK_CONTACT = 1001;
appModule.android.on("activityResult", function(eventData) {
发生的情况是,在调用phone.sms之后,调用contacts.getContact会使控件返回到电话插件,而不是通讯录插件。我尝试将手机的请求代码更改为1002,但结果相同。
因此,下一步是确定如何避免事件处理程序的冲突。
代替使用activityResult
事件,nativescript-phone插件将覆盖默认的活动结果回调。
一种解决方法是,在完成nativescript-phone之后,将回调设置为其原始值。
exports.sendText = function (args) {
console.log("entering sendText");
const activity = appModule.android.foregroundActivity || appModule.android.startActivity;
const onActivityResult = activity.onActivityResult;
permissions.requestPermissions([android.Manifest.permission.CALL_PHONE],
"Permission needed to send text")
.then(() => {
console.log("permission granted");
phone.sms()
.then((result) => {
console.log(JSON.stringify(result, null, 4));
activity.onActivityResult = onActivityResult;
})
})
}