如何在后台使用应用程序接收回调

How to receive callback with app in background

提问人:kumarvhat 提问时间:5/14/2023 最后编辑:Mark Rotteveelkumarvhat 更新时间:5/15/2023 访问量:176

问:

我希望能够在我的应用处于后台时收到回调,然后在收到回调时切换回应用程序,而无需用户执行任何手动步骤。活动将打开外部浏览器,供用户执行某些操作。然后手机应该会收到回电;它确实如此,但直到用户从 WebView 手动切换回应用程序(一个不需要的步骤)才会这样做。在那之前,该页面似乎被挂断了。我的问题是......

  1. 我需要创建一个 websocket 吗?还是通知处理程序?
  2. 如果是这样,在这种情况下,我将如何处理?
  3. 我是否需要将其切换到 activityforResult,以及当结果(任何结果)发生时切换回应用程序?
  4. 如果是这样,我该怎么做?

这是我在代码方面所拥有的: 打开网页,其中“exe”是字符串形式的网页

Log.i("inititating commands for", exe);
                Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(exe));
                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                i.setPackage("com.android.chrome");
                try {
                    context.startActivity(i);
                } catch (Exception e) {
                    e.printStackTrace();
                }

mainfest.xml 意图过滤器(我不确定这是否必要,也不确定它为我改变了什么)

<intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
                           <action android:name="android.intent.action.VIEW" />
                           <category android:name="android.intent.category.DEFAULT"/>
                           <category android:name="android.intent.category.BROWSABLE" />
                           <data android:host="127.0.0.1:54321/" android:scheme="http"/>
            </intent-filter>

我正在经历准成功。流已完成,但需要用户执行额外的步骤。我想删除这些手动步骤,并从用户的角度使流程无缝衔接。

java android 身份验证 回调 后台进程

评论


答:

1赞 Vinay 5/14/2023 #1

在 intent 过滤器上定义自定义架构

    <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="your_custom_scheme" />
</intent-filter>

定义回调 URL

String callbackUrl = "your_custom_scheme://callback";

将其传递给您的意图,如下所示

intent.putExtra("android.intent.extra.REFERRER", Uri.parse(callbackUrl));

当用户在外部浏览器中执行所需的操作并触发回调时,浏览器应尝试打开回调 URL。这应该会使你的应用回到前台。 在 Activity 中,重写 onNewIntent 方法,以便在应用已在运行时处理回调

    @Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    Uri data = intent.getData();
    if (data != null && data.getScheme().equals("your_custom_scheme")) {
        // Handle the callback here
    }
}

评论

0赞 kumarvhat 5/14/2023
嗨,vinay6kr,谢谢你,我想我遵循它。我已经更新了我的代码,并收到这样的错误:错误,当引用“@override”时,方法不会覆盖或实现超类型的方法,并且super.onNewIntent找不到符号。我试图在以下位置搜索文档:developer.android.com/reference/android/content/...也没有运气。我是否遗漏了导入,或者最近可能被另一种方法替换了?-- 再次感谢你
0赞 kumarvhat 5/15/2023
扩展活动 ..我只需要将其添加到我的类定义中,您的代码似乎可以工作。如果我需要更多的澄清,我会回来的。谢谢