Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何进行背景调查,然后根据调查结果设置某些电话参数_Android_Loops_Service_Background Process - Fatal编程技术网

Android 如何进行背景调查,然后根据调查结果设置某些电话参数

Android 如何进行背景调查,然后根据调查结果设置某些电话参数,android,loops,service,background-process,Android,Loops,Service,Background Process,我目前正在开发一个应用程序,需要更改手机上的某些设置,例如触发特定事件时的音量,例如时间事件(上午9点到下午5点之间)或电池事件(电池电量低于30%) 我想到的第一种方法是设置一个后台服务,每隔几秒或几分钟检查一次系统时间和电池电量(例如),然后在达到适当的时间或电池电量时更改手机设置。我不完全确定如何做到这一点,我已经看到一些其他的方法,似乎是可能的 在不需要用户交互的情况下,执行这些背景检查并根据调查结果更改设置的最佳方法是什么 提前谢谢 [编辑] Jakar和gobernador告诉我使用

我目前正在开发一个应用程序,需要更改手机上的某些设置,例如触发特定事件时的音量,例如时间事件(上午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
不能处理的事情。如果您必须使用
服务
,您可能需要使用
唤醒锁
,以保持服务运行,但这将使用额外的电池。我是否也可以