如何从 Android 系统回调到应用程序?

How to get a callback from Android system to the app?

我正在制作一个应用程序,您可以在其中与其他联系人聊天和通话。但是在打电话的情况下,我设计的应用程序是这样的,在输入号码并点击通话图标后,它会带你到本地通话应用程序进行通话,并更新我当前应用程序中的通话记录。

对于这个过程,这是我写的代码:

if (nativeCall(mobileNumber)) {
    Intent intent = new Intent(Intent.ACTION_CALL).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setData(Uri.parse("tel:" + mobileNumber));
    if (((BaseActivity) context).isNetworkOk()) {
        addToUserCallLogs(context, DateUtils.convertTimestampToDate(), contactUri, "Out", System.currentTimeMillis());
    }
    context.startActivity(intent);
    return true;
}

你可以看到我将手机号码放入意图并启动它。我正在使用 addToUserCallLogs() 函数在我的应用程序的通话记录中显示它。

这通常工作正常,但在以下情况下会出现问题。 当用户有多个调用应用程序时(例如,用户安装了名为 SMARTalk 的应用程序。现在他有本地调用程序和 SMARTalk 应用程序可以调用),在这种情况下 Android 系统提供选项供您选择,如下所示:

现在,如果他选择其中之一,即使在那种情况下也没有问题。假设他没有选择任何一个,而是点击了屏幕的另一部分。然后这个选项栏将被关闭。由于所有这些都是在启动 Intent 之后发生的,因此此调用将从函数 addToUserCallLogs() 添加到应用程序的调用日志中。但我不想让通话记录显示在通话记录中,因为我没有打过任何电话。

但根据我编写的代码,在开始意图之前,我将添加到我的应用程序的呼叫日志数据库中。有没有办法将通话是否发生的信息从系统发送回应用程序?

或者从应用中手动显示这些选项的方法?

如果您需要更多解释,请发表评论。

我猜没办法收到回调信息,因为ACTION_CALL没有return结果。即使您使用 startActivityForResult

,您也可以看到 docs 没有任何输出