我在真实设备上从 android 10 - android Q - MIUI 11 的后台启动活动时遇到问题。在此线程中:在 android 10 中启动活动背景我找到了如何在 Android 10 上执行此操作的信息,以及在模拟器上一切正常的信息。
我在使用 Android 10 (MIUI 11) 的小米米 9T Pro 上对此进行了测试,似乎这不起作用。
在 logcat 我有以下日志:
-W/ActivityTaskManager: Background activity start for com.com.app allowed because SYSTEM_ALERT_WINDOW permission is granted.
-D/ActivityTaskManagerServiceInjector: MIUILOG- Permission Denied Activity : Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.android.chrome cmp=com.android.chrome/com.google.android.apps.chrome.Main } pkg : com.com.app uid : 10283 tuid : 10052
Run Code Online (Sandbox Code Playgroud)
为什么这不适用于小米设备?
编辑:
我找到了解决方案。在 MIUI 中,应该打开额外的权限。它被称为:在后台运行时显示弹出窗口。这是使用此权限显示窗口的代码:
首先,我正在检查用户是否在手机上安装了 MIUI:
public static boolean isMiUi() {
return !TextUtils.isEmpty(getSystemProperty("ro.miui.ui.version.name"));
} …Run Code Online (Sandbox Code Playgroud) 我需要启动 android 前台服务,并在设备启动时从该服务启动活动。我已经广泛搜索了 web 和 stackoverflow 并尝试了不同的建议,但很奇怪我无法使此功能正常工作。
我不明白我做错了什么。
以下是我的项目中的代码和清单文件的内容。
我做错了什么以及如何解决它,在大多数 android 设备上工作的功能?
这是我的 AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="kor.location.tracker">
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<receiver android:name="kor.location.tracker.AutoStart">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:enabled="true"
android:name="kor.location.tracker.WorkerService"
android:exported="true"
android:permission="android.permission.BIND_JOB_SERVICE"
/>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
这是我的 Austostart.java:
package kor.location.tracker;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import …Run Code Online (Sandbox Code Playgroud) 我从服务开始活动直到 android P,但从 android10 开始,谷歌保留了一项限制,即活动不能从后台启动。
https://developer.android.com/guide/components/activities/background-starts
// below code stopped working
Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
我应该为 android10 做什么?
我制作了一个应用程序,如果预先配置的代码通过短信到达,它会自动拨打电话。
我最初在 Android 9 上构建这个应用程序,只要我使用 Android 9,它就可以正常工作,但我的手机升级到 Android 10 版本后,它就停止工作了。
分析日志并调试应用程序,没有出现任何错误消息。调试一切正常,我将活动称为如下:
Intent in = new Intent(Intent.ACTION_CALL);
in.setData(Uri.parse(callPhone));
in.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(in);
Run Code Online (Sandbox Code Playgroud)
但什么也没发生。它只是不打电话。我在使用其他版本 Android 的其他设备上安装后仍然可以工作,但在 Android 10 中则不行。
有人知道 Android 10 版本是否实施了不同的操作,或者是否有新的通话方式?
*注意:我还尝试更新代码以使用 androidx 库,更改为使用 targetSdkVersion 29,但仍然相同。