code of receiver:
public class onbootreceiver extends broadcastreceiver { @override public void onreceive(context context, intent intent) { try { bufferedreader in=new bufferedreader( new filereader(mainnote.log)); string alarmstring; int = 0; while ((alarmstring = in.readline())!=null) { long alarmtime = long.parselong(alarmstring.substring(0, alarmstring.indexof(" "))); if (alarmtime < system.currenttimemillis()) i++; else { string alarmarray[] = alarmstring.split("\\s"); intent alarmintent = new intent(context, alarmreceiver.class); if (alarmarray[1].equals("null")) alarmintent.putextra("alarm_message", ""); else alarmintent.putextra("alarm_message", alarmarray[1]); if (alarmarray[2].equals("true")) alarmintent.putextra("vibration", true); else alarmintent.putextra("vibration", false); if (alarmarray[3].equals("true")) alarmintent.putextra("sound", true); else alarmintent.putextra("sound", false); final int _id = (int) system.currenttimemillis(); pendingintent sender = pendingintent.getbroadcast(context , _id, alarmintent, pendingintent.flag_update_current); alarmmanager = (alarmmanager) context.getsystemservice(context.alarm_service); am.set(alarmmanager.rtc_wakeup, alarmtime, sender); } }
code of alarmreceiver.class
public class alarmreceiver extends broadcastreceiver { @override public void onreceive(context context, intent intent) { bundle bundle = intent.getextras(); string message = bundle.getstring("alarm_message"); boolean vibration = bundle.getboolean("vibration"); boolean sound = bundle.getboolean("sound"); if (message.equals(null)) notifierhelper.sendnotification(context, mainnote.class, context.getresources().getstring(r.string.nottitle), context.getresources().getstring(r.string.nodiscr), 1, sound, true, vibration); else notifierhelper.sendnotification(context, mainnote.class, context.getresources().getstring(r.string.nottitle), message, 1, sound, true, vibration); } }
manifest:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versioncode="1" android:versionname="1.0"> <uses-sdk android:minsdkversion="4" /> <uses-permission android:name="android.permission.vibrate" /> <uses-permission android:name="android.permission.receive_boot_completed" /> <uses-permission android:name="android.permission.write_external_storage" /> <uses-permission android:name="android.permission.wake_lock" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:label="@string/app_name" android:name=".mainnote"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <activity android:name=".fingerpaint"></activity> <receiver android:process=":remote" android:name=".alarmreceiver"></receiver> <receiver android:name=".onbootreceiver"> <intent-filter> <action android:name="android.intent.action.boot_completed"/> </intent-filter> </receiver> </application> </manifest>
mainnote.log can costist example
1304094118826 text true true
after reboot see process started, dont have notifacation. whats wrong here? , how debug code in onbootreciever?
i replace code in onbootreciever on
intent alarmintent = new intent(context, alarmreceiver.class); alarmintent.putextra("alarm_message", "blabla"); alarmintent.putextra("vibration", true); alarmintent.putextra("sound", true); final int _id = (int) system.currenttimemillis(); pendingintent sender = pendingintent.getbroadcast(context , _id, alarmintent, pendingintent.flag_update_current); alarmmanager = (alarmmanager) context.getsystemservice(context.alarm_service); am.set(alarmmanager.rtc_wakeup, system.currenttimemillis()+6000, sender);
and work. problem in part read information file.
one problem in mainnote.log. log static varible cant contact here. have strange problem -
java.io.filenotfoundexception: /mnt/sdcard/alarmsfromdrawnote.alm (permission denied) com.notedraw.bos.app.onbootreceiver1.onreceive(onbootreceiver1.java:30)
30th line -
bufferedreader in=new bufferedreader(new filereader(log));
wtf? (see manifest)
your alarmreceiver needs static broadcastreceiver onbootreceiver in order act on alarm set. unfortunately, don't think can have more 1 static receiver per application (i tried before , did not work me). try putting 2 intent filters on onbootreceiver , have deal both broadcasts.
in onrecieve, check intent.getaction()
see broadcast receiving (the boot 1 or alarm), , deal appropriately.
Comments
Post a Comment