无法使android应用程序回到API 31的前台



我需要将应用程序从后台转移到前台。我通过使用以下代码使这项工作适用于31以下的版本:

public static void bringApplicationToFront(Context context)
{  
Log.d("bringApplicationToFront");
Intent notificationIntent = new Intent(context, SplashActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
pendingIntent = PendingIntent.getActivity
(context, 0, notificationIntent, PendingIntent.FLAG_MUTABLE);
}
else {
pendingIntent = PendingIntent.getActivity
(context, 0, notificationIntent, PendingIntent.FLAG_ONE_SHOT);
}
try
{
pendingIntent.send();
}
catch (PendingIntent.CanceledException e)
{
e.printStackTrace();
} 
}

SplashActivity是我的根Activity。我在BroadcastReceiver上尝试了这一点,还使用了延迟运行代码的后台线程。

我从应用程序类调用这个方法,如下所示:

@Override
public void onTrimMemory(int level)
{
super.onTrimMemory(level);
if (level == TRIM_MEMORY_UI_HIDDEN) {
Print.e("App is background"); 
bringApplicationToFront(); 
}
}

我如何使这项工作为API 31?

Android已经收紧了从后台进程(ServiceBroadcastReceiver等(启动Activity的限制。您可以在此处阅读相关信息:https://developer.android.com/guide/components/activities/background-starts#exceptions

可能您唯一能做的就是请求SYSTEM_ALERT_WINDOW权限作为一种变通方法。就我个人而言,我认为这是一个可怕的黑客攻击,安卓可能会在未来的版本中堵住这个漏洞。

相关内容

  • 没有找到相关文章

最新更新