Android O后台限制-是否影响Android.intent.action.PHONE_状态?

Android O后台限制-是否影响Android.intent.action.PHONE_状态?,android,android-broadcast,android-background,android-8.0-oreo,Android,Android Broadcast,Android Background,Android 8.0 Oreo,我已经实现了一个隐式广播接收器来监听电话 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> <receiver android:name=".CallReceiver" > &l

我已经实现了一个隐式广播接收器来监听电话

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
   <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>


    <receiver android:name=".CallReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
        </intent-filter>
    </receiver> 

这不应该再起作用了


有人能告诉我我的广播是否有异常吗?android.permission.READ\u PHONE\u STATE

你确定你已经将编译SDK和构建工具设置为版本26了吗

compileSdkVersion 26
buildToolsVersion "26.0.0"
对于action
android.intent.action.PHONE_STATE
的意图,没有隐含的广播例外,因为此意图不是直接针对您的应用程序的,也不是,因此,即使在预览版的android O中可以使用,在生产版的android O中也可能无法使用

一个例外的意图的例子是使用action
android.intent.action.MY_PACKAGE_替换的意图,因为该意图针对一个特定的应用程序,该应用程序正在更新

总体思路是通过不必要地使用通用广播唤醒所有应用程序来节省电源(电池使用)

您可以通过在服务中注册广播接收器来解决这一问题,您可能希望该服务是前台服务,因为也有。前台服务被强制显示一个通知(可以是最低优先级,这样关联的图标就不会出现在状态栏中,至少在谷歌的Android版本中是这样)。这里的想法是用户应该知道任何可能使用电池的东西。

实际上,“目标”不是指编译版本,而是指“目标”版本。因此,请检查build.gradle中是否有下一行:

defaultConfig {
    applicationId 'com.yourid'
    targetSdkVersion 26
}
例如,您的应用程序可以在较新的应用程序上编译,但可以针对以前的应用程序:

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.2"

    defaultConfig {
        applicationId 'com.yourid'
        minSdkVersion 21
        targetSdkVersion 25
}

嘿,很抱歉我的回复太晚了,我下班了,是的,我的目标是CompilesDKVersion26 buildToolsVersion“26.0.0”,我有一个Android O的预览版本也许你是对的,这在生产版本中不起作用,但无论如何我希望有一个解决方案