I dont know if this can be done but right now i have a service that has an alarm manager which refreshed the battery every 5 mins to check the battery % and alert of the battery gets below a certain %. Is there a better way to watch the battery that does not require an alarm manager and refreshes when the battery changes because it seems better than refreshing after a certain amount of time
tyczj,
I would create a BroadcastReceiver to receive the following Broadcast: ACTION_BATTERY_CHANGED. This way you aren't constantly polling the battery unnecessarily.
Additional:
It would be registered like this:
<receiver android:name=".BatteryReceiver">
<intent-filter>
<action android:name="android.intent.action.BATTERY_CHANGED" />
</intent-filter>
</receiver>
You can listen to the systems broadcast intents:
ACTION_BATTER_CHANGED
ACTION_POWER_CONNECTED
ACTION_POWER_DISCONNECTED
Related
Lenovo A 1000 mobile not able to listen to Boot Completed Broadcast receiver.The Same code works on other mobiles perfectly.What might be the reason for that? Are there any other alternatives to capture Boot Completed event in android other than Broadcast Receivers?
Some devices (mostly HTC) has a feature called fast reboot which doesn't trigger BOOT_COMPLETED. Instead they trigger QUICKBOOT_POWERON. So you need to register a recever for both broadcasts.
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
You can try this one.
I want to make an alarm clock. I've done it but it works only if device wasn't restarted.If it was I just don't get any alarm. What should I do to receive my alarm no matter has device been restarted or not?
That's how I set alarm time:
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP,calendar1.getTimeInMillis(),pi1);
This is what I tried in a similar situation:
Make your broadcast receiver detect the system restart. Now, as soon as your system restarts, your broadcast receiver will detect it and you can perform your task. Like, in my project, I ran a query onto my SQLite database and retrieved all the alarms that have not executed and then executed them according to my requirements and updated the database with the same.
You can try something similar to it.
Code to retrieve alarms:
Add your Broadcast Receiver with the following attributes:
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
This BroadcastReceiver will detect your Android device's restart and execute the onReceive() method of the BroadcastReceiver. In the onReceive() method, retrieve all the alarms according to your criteria and then process them further.
To learn further about how to retrieve records or tuples from the SQLite Database go through the following link:
http://developer.android.com/training/basics/data-storage/databases.html#ReadDbRow
In my application the user has set some reminders and I have to alarm them when the time has come. Currently I'm using AlarmManager.RTC as a type of AlarmManager
am.set(AlarmManager.RTC_WAKEUP, date.getTimeInMillis(), pendingIntent);
it in working as per instruction
// Sets an alarm - note this alarm will be lost if the phone is turned
// off and on again
is there any way the I can fire missed alarms when I turn on the device?
Please note that I don't want to wakeup the device, I just wanted to remind them when they turn on the device.
PS: I have read the documentation http://developer.android.com/reference/android/app/AlarmManager.html#RTC, but I didn't find my option.
is there any way the I can fire missed alarms when I turn on the device?
Step #1: Have some way of tracking, yourself, what is missed, such as by tracking event status in a database.
Step #2: Set up a BOOT_COMPLETED BroadcastReceiver to find when the phone is rebooted. In there, schedule any alarm(s) that are still in the future, and decide what to do about alarms that occurred in the past but were missed (e.g., raise a Notification pointing out the missed events).
You would have to do this manually.
One way to do this would be to listen for the phone shutdown event:
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
and before the device shuts down, save the shutdown time.
Then listen for device bootup:
<action android:name="android.intent.action.BOOT_COMPLETED" />
and write your own logic that determines which alarms would have fired during that downtime, and fire those alarms immediately with AlarmManager.
AlarmManager will alarm all of your alarms till your phone is on.
Registered alarms are retained while the device is asleep (and can
optionally wake the device up if they go off during that time), but
will be cleared if it is turned off and rebooted.
Now that only way fits is to kepp tracks through database.
Put an additional class that extends BroadcastReceiver. Where in its OnReceive() method you can re-generate your alarms when device reboots. (obviously if you have some track, i.e database).
Setting BroadcastReceiver for your purpose can be seen here How to start an Application on startup?.
Hope this helps.
Register broadcastReceiver in your Manifest.xml
<receiver
android:name=".AlarmRestartReceiver"
android:enabled="true">
<intent-filter>
<action
android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
After this, listen event when device wake up.
override fun onReceive(context: Context, intent: Intent?) {
if (intent?.action == "android.intent.action.BOOT_COMPLETED") {
// re-register all alarm here..
}
}
Can I schedule alarm manager (.set() methode) in android to a time which is one month later the current time
will it be alive for that mutch of time ?
what will be the OS effects on this alarmManager ?
Tip for a case when user reboots his phone. You can declare BroadcastReceiver with the following intent-filter:
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
and re-schedule your alarm in onReceive(...) of your receiver class. Intent will be delivered to the receiver after user reboots his phone. Don't forget to add the following permission to your manifest file:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Or you can use the library that will handle such cases for you:
https://github.com/commonsguy/cwac-wakeful
Theoretically yes, If the user keeps his phone on for that long, however the alarm doesn't survive reboots and will therefore not be scheduled when the phone restarts.
I'm trying to make an app for work that acts as parental control's and control's the wifi state, gps state, mobile state, and 4G state. I need it to run in the background to check the state's every 60 sec and then change it if needed. Also it needs to start doing this as soon as the device turns on. My question is how do I run it in the background but still allow the user to use one other app? (yes i know this would most likly drain battery life.)
The thing what you are looking for is called Services.
They offer the functionality which you are looking for. You can also start a service with the phone bootup and interact with them via IPC.
Register a BroadcastReceiver to start your application just after the device turns on
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
...
<receiver
android:name="com.package.YourReceiver"
android:enabled="true" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
In your BroadcastReceiver, do whatever initialization you need and then configure the AlarmManager to be notified periodically, ideally on a WakefulBroadcastReceiver
Every time you are notified, start a IntentService and do your work on there.