Sunday, 15 January 2012

broadcastreceiver - Unable to schedule sms message sending Android -



broadcastreceiver - Unable to schedule sms message sending Android -

i'm working on android app needs set schedule of sms messages sent @ frequency. whatever reason can't seem messages start sending.

this schedule class:

public class smsalarm extends broadcastreceiver { private int hour1, minute1, hour2, minute2, frequency; @override public void onreceive(context context, intent intent) { smsmanager manager = smsmanager.getdefault(); telephonymanager tmgr =(telephonymanager)context.getsystemservice(context.telephony_service); string phonenumber = tmgr.getline1number(); calendar c = calendar.getinstance(); int currenthour = c.get(calendar.hour_of_day); int currentminute = c.get(calendar.minute); if (currenthour >= hour1 && currenthour <= hour2 && currentminute >= minute1 && currentminute <= minute2) { string[] messages = context.getresources().getstringarray(r.array.messages); manager.sendtextmessage(phonenumber, null, messages[(int)(math.random() * messages.length)], null, null); } } public void setalarm(context context) { alarmmanager am=(alarmmanager)context.getsystemservice(context.alarm_service); intent = new intent(context, smsalarm.class); pendingintent pi = pendingintent.getbroadcast(context, 0, i, 0); am.setrepeating(alarmmanager.rtc_wakeup, system.currenttimemillis(), 1000 * 60 * frequency, pi); //millisecond * sec * minutes } public void cancelalarm(context context) { intent intent = new intent(context, smsalarm.class); pendingintent sender = pendingintent.getbroadcast(context, 0, intent, 0); alarmmanager alarmmanager = (alarmmanager) context.getsystemservice(context.alarm_service); alarmmanager.cancel(sender); } }

i set private variables @ top of class mainactivity , create serialized object of class can utilize persist alarm each use.

in case i'm not using right permissions post manifest file.

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp" android:versioncode="1" android:versionname="1.0" > <uses-permission android:name="android.permission.send_sms"></uses-permission> <uses-permission android:name="android.permission.write_sms"></uses-permission> <uses-permission android:name="android.permission.receive_boot_completed"></uses-permission> <uses-permission android:name="android.permission.get_tasks"></uses-permission> <uses-permission android:name="android.permission.read_phone_state"></uses-permission> <uses-sdk android:minsdkversion="8" android:targetsdkversion="16" /> <application android:allowbackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/apptheme" android:debuggable="true" > <activity android:name="com.example.myapp.mainactivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> </manifest>

can see why unable send messages?

it seems missing registering receiver in manifest file, appropriate action string. given below.

<receiver android:name=".smsalarm" > <intent-filter> <action android:name="com.android.whatever.what_ever_nam_you_wanna_give" /> </intent-filter>// can alter name/action string par ur requirement. </receiver>

and create different .java file broadcastreceiver class

you need set same action string in intent, remember action string must same in manifest , here intent.setaction("com.android.whatever.what_ever_nam_you_wanna_give"); in java also. tringger receiver.

your code can changed given below.

intent intent = new intent(getapplicationcontext(), to_call_when_alarm_goes_off.class); intent.setaction("com.android.whatever.what_ever_nam_you_wanna_give");// added line pendingintent pintent = pendingintent.getbroadcast(getapplicationcontext(),0, intent, 0); alarmmanager alarms = (alarmmanager) getsystemservice(context.alarm_service); alarms.cancel(pintent); alarms.setrepeating( alarmmanager.rtc_wakeup, system.currenttimemillis()+1000, alarmmanager.interval_day, pintent);

android broadcastreceiver alarmmanager telephonymanager smsmanager

No comments:

Post a Comment