Android M startActivity电池优化

Android M startActivity电池优化,android,android-intent,optimization,battery,Android,Android Intent,Optimization,Battery,我正在开发一个应用程序,如果用户靠近某个地方,它会提醒用户。 当然,如果手机处于空闲状态,也必须这样做。 有了DOZE now,我明白了我必须将我的应用程序列入白名单,为此,我看到,由于Buddy在 这应该太容易了…因为谷歌不喜欢这种方法,如果你这么做,你的应用程序应该被禁止进入游戏商店…没有评论。。。 好的,那么方法应该是驱动用户进入电池设置,并手动将你的应用程序添加到DOZE的白名单中…是的,这应该是一堵很难爬的墙…无论如何,这似乎是唯一的方法…现在答案是: 我可以使用意图转到电源使用情况摘

我正在开发一个应用程序,如果用户靠近某个地方,它会提醒用户。 当然,如果手机处于空闲状态,也必须这样做。 有了DOZE now,我明白了我必须将我的应用程序列入白名单,为此,我看到,由于Buddy在

这应该太容易了…因为谷歌不喜欢这种方法,如果你这么做,你的应用程序应该被禁止进入游戏商店…没有评论。。。 好的,那么方法应该是驱动用户进入电池设置,并手动将你的应用程序添加到DOZE的白名单中…是的,这应该是一堵很难爬的墙…无论如何,这似乎是唯一的方法…现在答案是: 我可以使用意图转到电源使用情况摘要,方法如下():

但是如何直接进入应用程序列表来选择电池优化


谢谢你的回答

要打开用于选择电池优化的应用程序列表,可以使用以下代码示例:

private void openPowerSettings(Context context) {
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
    context.startActivity(intent);
}
它不需要有
权限,所以应该可以将其发布到Google Play(有关详细信息,请查看此问题的帖子和评论)

注意

添加此行

intent.setData(Uri.parse("package:" + mContext.getPackageName()));

将导致崩溃“致命异常:android.content.ActivityNotFoundException未找到可处理意图的活动{act=android.settings.REQUEST\u IGNORE\u BATTERY\u OPTIMIZATIONS dat=package:io.demo.example}”。用户必须在列表中找到应用程序,似乎无法直接跳转到我们的应用程序

尝试以下代码打开忽略电池优化设置页面

private void openPowerSettings() {
    startActivityForResult(new Intent(android.provider.Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS), 0);
}
无需向清单文件添加额外权限。

我使用的是:

舱单:



据我所知,action Settings.action\u IGNORE\u BATTERY\u OPTIMIZATION\u Settings是你需要的Hi Grimmy,小心点,因为我写过google不喜欢这种方法,如果你这么做,你的应用程序应该被禁止进入play store…阅读以下内容:根据这条线索,如果谷歌请求android.permission.REQUEST\u IGNORE\u BATTERY\u OPTIMIZATIONS权限,它可以禁止你的应用程序。但是你不需要它来进行设置。操作\u忽略\u电池\u优化\u设置操作,它将显示用于选择电池优化的应用程序列表,因此你说如果我没有将请求放入清单文件,对于谷歌来说是可以的?这是你发送给我的线程中提到的,我得到了一个错误致命的异常:android.content.ActivityNotFoundException没有找到处理意图的活动{act=android.settings.REQUEST\u IGNORE\u BATTERY\u OPTIMIZATIONS dat=package:io.demo.example}我也得到了同样的异常。到目前为止有什么解决方案吗?我们可以直接打开android的本机弹出窗口,要求禁用电池优化,查看下面的链接。它对我有用。您可以将其写入Java吗?您可以将其复制到Kotlin文件并使用Java调用它。感谢您的解决方案发布应用程序后是否有任何限制@BhavinChauhan检查您发布到的商店的规则。规则可以改变。。。
intent.setData(Uri.parse("package:" + mContext.getPackageName()));
private void openPowerSettings() {
    startActivityForResult(new Intent(android.provider.Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS), 0);
}
import android.Manifest
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Build
import android.os.PowerManager
import android.provider.Settings
import androidx.annotation.RequiresPermission
import androidx.core.content.ContextCompat

object PowerSaverHelper {
    enum class WhiteListedInBatteryOptimizations {
        WHITE_LISTED, NOT_WHITE_LISTED, ERROR_GETTING_STATE, IRRELEVANT_OLD_ANDROID_API
    }

    fun getIfAppIsWhiteListedFromBatteryOptimizations(context: Context, packageName: String = context.packageName): WhiteListedInBatteryOptimizations {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return WhiteListedInBatteryOptimizations.IRRELEVANT_OLD_ANDROID_API
        val pm = context.getSystemService(Context.POWER_SERVICE) as PowerManager?
                ?: return WhiteListedInBatteryOptimizations.ERROR_GETTING_STATE
        return if (pm.isIgnoringBatteryOptimizations(packageName)) WhiteListedInBatteryOptimizations.WHITE_LISTED else WhiteListedInBatteryOptimizations.NOT_WHITE_LISTED
    }

    //@TargetApi(VERSION_CODES.M)
    @SuppressLint("BatteryLife", "InlinedApi")
    @RequiresPermission(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)
    fun prepareIntentForWhiteListingOfBatteryOptimization(context: Context, packageName: String = context.packageName, alsoWhenWhiteListed: Boolean = false): Intent? {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
            return null
        if (ContextCompat.checkSelfPermission(context, Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) == PackageManager.PERMISSION_DENIED)
            return null
        val appIsWhiteListedFromPowerSave: WhiteListedInBatteryOptimizations = getIfAppIsWhiteListedFromBatteryOptimizations(context, packageName)
        var intent: Intent? = null
        when (appIsWhiteListedFromPowerSave) {
            WhiteListedInBatteryOptimizations.WHITE_LISTED -> if (alsoWhenWhiteListed) intent = Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS)
            WhiteListedInBatteryOptimizations.NOT_WHITE_LISTED -> intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).setData(Uri.parse("package:$packageName"))
            WhiteListedInBatteryOptimizations.ERROR_GETTING_STATE, WhiteListedInBatteryOptimizations.IRRELEVANT_OLD_ANDROID_API -> {
            }
        }
        return intent
    }
}
PowerSaverHelper.prepareIntentForWhiteListingOfBatteryOptimization(this)?.let { startActivity(it) }