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

Posted

技术标签:

【中文标题】如何从 Android 系统获取回调到应用程序?【英文标题】:How to get a callback from Android system to the app? 【发布时间】:2021-09-16 16:47:08 【问题描述】:

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

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

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;

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

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

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

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

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

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

【问题讨论】:

【参考方案1】:

我想没有办法接收回调信息,因为ACTION_CALL 没有返回结果。即使您使用startActivityForResult ,您也可以看到来自docs 的输出什么都没有

【讨论】:

还有其他方法吗?比如从应用程序本身获取这些应用程序选项,然后当用户选择其中一个时,您可以使用该应用程序调用? 您是否尝试读取系统***.com/questions/6786666/…的通话记录?我认为您可以使用通话记录来验证您的操作是否已执行 阅读通话记录当然是一个解决办法。但是为此编写代码,请求许可,......所有这些都是一项非常艰巨的任务。如果有一些回调,而不是那样,它会容易得多。我想要这样的解决方案。

以上是关于如何从 Android 系统获取回调到应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在android + viewModel中进行回调

如何获取我的 Android 应用程序的内部版本号? [复制]

如何从网页 (HTML) 中获取相关信息到我的 Android 应用程序中?

Android Google Plus SDK:如何在 +1 按钮上获取回调 (PlusOneButton)

SWIG (Java):如何将带有回调函数的结构从 Android 应用程序传递给 C++?

如何从活动中传递回调到片段