Android 如何进行背景调查,然后根据调查结果设置某些电话参数
我目前正在开发一个应用程序,需要更改手机上的某些设置,例如触发特定事件时的音量,例如时间事件(上午9点到下午5点之间)或电池事件(电池电量低于30%) 我想到的第一种方法是设置一个后台服务,每隔几秒或几分钟检查一次系统时间和电池电量(例如),然后在达到适当的时间或电池电量时更改手机设置。我不完全确定如何做到这一点,我已经看到一些其他的方法,似乎是可能的 在不需要用户交互的情况下,执行这些背景检查并根据调查结果更改设置的最佳方法是什么 提前谢谢 [编辑] Jakar和gobernador告诉我使用Android 如何进行背景调查,然后根据调查结果设置某些电话参数,android,loops,service,background-process,Android,Loops,Service,Background Process,我目前正在开发一个应用程序,需要更改手机上的某些设置,例如触发特定事件时的音量,例如时间事件(上午9点到下午5点之间)或电池事件(电池电量低于30%) 我想到的第一种方法是设置一个后台服务,每隔几秒或几分钟检查一次系统时间和电池电量(例如),然后在达到适当的时间或电池电量时更改手机设置。我不完全确定如何做到这一点,我已经看到一些其他的方法,似乎是可能的 在不需要用户交互的情况下,执行这些背景检查并根据调查结果更改设置的最佳方法是什么 提前谢谢 [编辑] Jakar和gobernador告诉我使用
AlarmManager
、BroadcastReceiver
和IntentService
后,我得到了以下答案:
通过例子说明了如何实现这一点,感谢大家的帮助
[编辑]
我成功地设置了它,并使服务正常工作,它还没有做任何事情,但其余的应该很容易。我是通过以下组件完成的:
- 启动
,设置重复报警以运行我的报警BroadcastReceiver
。这将在手机重新启动后启动服务BroadcastReceiver
- 我的主应用程序活动中的类似代码,用于取消启动服务的任何其他挂起意图。这将在应用程序运行时启动服务,有利于在安装后启动
- 报警
类,该类具有到BroadcastReceiver
的代码startService()
- 最后是我的
类,它包含了我想在IntentService
onHandleIntent()方法中执行的操作。(我还想补充一点,我对这个类有一个问题,这是因为构造函数不允许有任何参数)
再次感谢。使用
服务将很难做到这一点。您需要的是一个广播接收器
。Android操作系统的工作方式是当某些事件发生时(如动作\u启动\u完成
或动作\u电源\u连接
,请参阅中的标准广播动作部分),Android广播一个意图
,告诉所有应用程序该事件已经发生。您需要做的是设置一个broadcastReceiver
来捕捉您想要的广播
public class MyReciever extends BroadcastReciever {
@Overwrite
public void onRecieve(Context context, Intent intent) {
//parse intent
//carry out actions
}
}
请注意,您需要覆盖的唯一方法是onreceive()
。此外,您似乎将寻找多个不同的广播。如果是这种情况,您可以选择创建多个broadcastReceiver
扩展:例如BatteryLowReciever
,atworktimeReceiver
,等等。您也可以选择只创建一个并解析多个意图
private final String[] broadcasts = {android.intent.action.BATTERY_LOW, ...};
int i = 0;
for(i ; i < broadcasts.length, i++) {
if (intent.getAction().equals(broadcasts[i]))
break;
}
switch (i) {
case 1:
//perform battery low actions
break;
case 2:
//different actions
//More cases and actions
}
private final String[]broadcasts={android.intent.action.BATTERY_LOW,…};
int i=0;
对于(i;i
编辑:根据你告诉我的,这里列出了一些需要调查的事情:
- 建立用于编辑配置文件的UI的步骤
- 用于基于时间的激活
- 用于基于电池和其他激活
- 要实现概要文件
您可以在服务中检查电池电量。我想我会建议启用所有功能(除了电池),然后看看检查/设置应用程序的所有功能需要多长时间。如果低于50ms,则在电池电量不存在问题的任何情况下(例如,时间触发器),都应使用广播接收器
然后,如果用户启用电池电量检查,则始终使用该服务
如果运行所有检查/设置系统设置需要50毫秒以上,则始终使用服务
我建议注册一个BroadcastReceiver
,并完成BOOT\u
操作,这样你的应用程序就可以在重启后运行。另外,我不建议经常运行服务。我建议使用AlarmManager
每隔10分钟左右运行一次服务。原因是,如果你的服务需要15秒来完成它所需要的工作,那么它将浪费电池使其一直运行
另外,如果您打算混合使用Service/BroadcastReceiver,我建议创建一个类(方法称为M
)。然后在M
中,您将有一个方法(比如doSomething()
)来做您需要的任何事情。然后在服务或接收器中,您只需要调用M.doSomething()
,这样就不必每次更改代码两次
如果我不清楚/困惑或者我需要补充什么,请告诉我,我会尽力详细说明
编辑:
您需要使用AlarmManager
设置报警,使用Calendar
获取并设置特定的时间/日期。将帮助您完成此过程。要保持设备的CPU处于唤醒状态并防止其停止服务,您需要使用PowerManager
。对于您没有指定的其他内容,您应该能够通过谷歌搜索或查看文档来查找WifiManager
用于更改wifi设置。您应该使用AlarmManager
和BroadcastReceiver
的组合来检查它能够处理的事情,使用服务来检查BroadcastReceiver
不能处理的事情。如果您必须使用服务
,您可能需要使用唤醒锁
,以保持服务运行,但这将使用额外的电池。我是否也可以