在Oreo的ACTION_POWER_CONNECTED上启动活动是否有解决方法?

时间:2019-06-24 08:37:22

标签: android android-activity android-8.1-oreo

我目前正在为客户端开发一款应在充电时启动的应用。我知道做到这一点的唯一方法是使用清单清单:

SELECT tab.column_name || decode(lead(tab.column_name,1) over (order by tab.column_id),null,'',',')
FROM
    all_tab_columns tab,
    all_constraints pk,
    all_cons_columns pk_det
WHERE
    tab.table_name = pk.table_name (+)
    and pk.table_name = pk_det.table_name (+)
    and tab.owner = pk.owner (+)
    and pk.owner = pk_det.owner (+)
    and pk.constraint_name = pk_det.constraint_name (+)
    and tab.column_name = pk_det.column_name (+)
    and tab.data_type not like '%LOB%'
    and tab.owner = :OWNER_SOURCE
    and tab.table_name = :TABLE_NAME_SOURCE

但是对于Android Oreo而言,这不再是有效的选项,并且会导致出现错误,并显示“不允许后台执行”的字样。

有人找到解决此问题的好方法吗?本质上,我需要一种方法来在连接电源时启动活动,并使该活动保持打开状态,直到断开电源为止。该电话不会运行任何我可以用来创建明确广播的服务或活动。

1 个答案:

答案 0 :(得分:0)

  

但是对于Android Oreo而言,这不再是有效选项,并且会导致   沿“不允许后台执行”的行显示错误。

来自Oreo,当应用程序处于前台时,它可以自由创建和运行前台和后台服务。因此,一种可能的方法是创建一个foreground service来监视使用BatteryManager类的充电/不充电状态-该类以粘性状态广播所有电池和充电详细信息,其中包括充电状态。 / p>

val ifilter = IntentFilter(Intent.ACTION_BATTERY_CHANGED)
val batteryStatus = context.registerReceiver(null, ifilter)

 val status = batteryStatus?.getIntExtra(BatteryManager.EXTRA_STATUS, -1)
 val isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL

现在您知道设备是否正在充电。

接下来是同一服务类代码-根据收费状态,您可以如下所示启动YourActivity,

Intent i = new Intent();
i.setClass(this, YourActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);

现在开始这样的活动可能不是最好的用户体验-因此,您可能要考虑使用android的Notification system更新/通知用户充电状态