Android 考虑到API 29中新的安全性更改,如何将应用程序返回前台?

Android 考虑到API 29中新的安全性更改,如何将应用程序返回前台?,android,Android,我有一个应用程序,它通过本地主机向一个我不控制的独立的第三方应用程序发出http请求,并在继续之前等待该调用的响应。工作流程如下所示: 用户在我的应用程序中 用户按下按钮,启动并调用第三方应用程序 用户与第三方应用程序交互 当第三方应用程序完成其工作时,我的应用程序将接收完成的http响应,并通过MoveTaskToFront将自己拉回到最前线,以便用户继续工作 这在Android9及以下版本中正常工作,但最后一步在Android10中不起作用,我相信是由于 我无法控制第三方应用程序,因此我

我有一个应用程序,它通过本地主机向一个我不控制的独立的第三方应用程序发出http请求,并在继续之前等待该调用的响应。工作流程如下所示:

  • 用户在我的应用程序中
  • 用户按下按钮,启动并调用第三方应用程序
  • 用户与第三方应用程序交互
  • 当第三方应用程序完成其工作时,我的应用程序将接收完成的http响应,并通过MoveTaskToFront将自己拉回到最前线,以便用户继续工作
这在Android9及以下版本中正常工作,但最后一步在Android10中不起作用,我相信是由于

我无法控制第三方应用程序,因此我无法修改它,使其在完成工作时自动关闭,或者在适当的时候请求将呼叫应用程序返回前台。有人知道这方面的解决方法吗

编辑:根据要求,我添加了带有调出的代码段。这是一个Xamarin项目,所以它是用C#编写的,但是这个特定的代码部分是特定于Android平台的,所以我可以进行Android系统调用

首先,我必须打开第三方应用程序:

Intent intent = CrossCurrentActivity.Current.AppContext.PackageManager.GetLaunchIntentForPackage("com.bbpos.android.tsys");
            if (intent != null)
            {
                // We found the activity now start the activity
                intent.AddFlags(ActivityFlags.ClearTask);
                CrossCurrentActivity.Current.AppContext.StartActivity(intent);
            }
然后,我通过本地主机调用它,处理响应,并希望切换回我的应用程序

using (var client = new HttpClient())
            {
                // by calling .Result we're forcing synchronicity
                var response = client.GetAsync("http://127.0.0.1:8080/v2/pos?TransportKey=" + pTransportKey + "&Format=JSON").Result;
                if (response.IsSuccessStatusCode)
                {
                    var responseContent = response.Content;

                    // as above, forcing synchronicity
                    string responseString = responseContent.ReadAsStringAsync().Result;

                    var result = JsonConvert.DeserializeObject<GeniusTransactionResponse>(responseString);

                    var manager = (ActivityManager)Application.Context.GetSystemService(Context.ActivityService);
                    var test = manager.AppTasks.First().TaskInfo.Id;
                    manager.AppTasks.First().MoveToFront();
                    //manager.MoveTaskToFront(CrossCurrentActivity.Current.Activity.TaskId, 0);

                    return result;
                }
                else
                {
                    return null;
                }
            }
使用(var-client=new-HttpClient())
{
//通过调用。结果我们强制同步
var response=client.GetAsync(“http://127.0.0.1:8080/v2/pos?TransportKey=“+pttransportkey+”&Format=JSON”)。结果;
if(响应。IsSuccessStatusCode)
{
var responseContent=response.Content;
//如上所述,强制同步
string responseString=responseContent.ReadAsStringAsync().Result;
var result=JsonConvert.DeserializeObject(responseString);
var manager=(ActivityManager)Application.Context.GetSystemService(Context.ActivityService);
var test=manager.AppTasks.First().TaskInfo.Id;
manager.AppTasks.First().MoveToFront();
//manager.MoveTaskToFront(CrossCurrentActivity.Current.Activity.TaskId,0);
返回结果;
}
其他的
{
返回null;
}
}

如果其他人有同样的问题,请快速更新:我可以通过向项目中添加一个。只要用户注册并启用辅助功能服务,MoveTaskToFront就可以像在API中一样发挥作用。您可以编辑帖子以包含相关代码吗?查看您是如何请求第三方的,以及您是如何收到第三方的响应可能会有所帮助。感谢您的建议,我已经添加了相关的代码片段。