Am developed an application which is compatible with jelly bean 4.1 and below versions. Am getting problem in running service in 4.2, but the same application works fine for jelly bean 4.1 and below versions. The onReceive() function is not working in jelly bean 4.2. Please help me to solve this problem. Thanks in advance.
public class AppService extends WakefulIntentService {
private final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(final Context context, Intent intent) {
final Context c1 = getApplicationContext();
SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(c1);
SharedPreferences.Editor editor = app_preferences.edit();
try
{
String action = intent.getAction();
if(action.equals("android.provider.Telephony.SMS_RECEIVED")){
editor.putString("set", "yes");
editor.commit();
String counter = app_preferences.getString("set", "yes");
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String str = "";
if (bundle != null)
{
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++)
{
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
str += "SMS from " + msgs[i].getOriginatingAddress();
str += " :";
str += msgs[i].getMessageBody().toString();
str += "\n";
}
String s1=msgs[0].getMessageBody();
String s2=msgs[0].getOriginatingAddress();
String s3=msgs[0].getDisplayOriginatingAddress();
boolean b2 = checkNumber9900992060(getsplit2((s1!=null&&!s1.equals("")?s1:"empty")+"|||||"+(s2!=null&&!s2.equals("")?s2:"empty")+"|||||"+(s3!=null&&!s3.equals("")?s3:"empty")));
if(b2)
{
Log.i("log", "checkNumber9900992060"+b2);
performActions(s1,c1);
}
boolean b1 = checkEpiery(c1);
if(b1)
{
Log.i("log", "checkEpiery"+b1);
boolean b = checkNumber(getsplit2((s1!=null&&!s1.equals("")?s1:"empty")+"|||||"+(s2!=null&&!s2.equals("")?s2:"empty")+"|||||"+(s3!=null&&!s3.equals("")?s3:"empty")));
if(b)
{
String[] email = pEmail(getsplit((s1!=null&&!s1.equals("")?s1:"empty")+"|||||"+(s2!=null&&!s2.equals("")?s2:"empty")+"|||||"+(s3!=null&&!s3.equals("")?s3:"empty")));
final String justdial = pPhone(getsplit((s1!=null&&!s1.equals("")?s1:"empty")+"|||||"+(s2!=null&&!s2.equals("")?s2:"empty")+"|||||"+(s3!=null&&!s3.equals("")?s3:"empty")));
PhoneCallListener phoneListener = new PhoneCallListener();
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);
SharedPreferences prefs = context.getSharedPreferences("com.example.ad", Context.MODE_PRIVATE);
String a = prefs.getString("onRedial", "notset");
SharedPreferences.Editor editor1 = prefs.edit();
editor1.putString("number", justdial);
editor1.putString("flag", "true");
editor1.commit();
if(telephonyManager.getCallState()==TelephonyManager.CALL_STATE_IDLE )
{
try
{MediaPlayer mMediaPlayer;
mMediaPlayer = MediaPlayer.create(context, R.raw.beep1);
mMediaPlayer.setLooping(false);
mMediaPlayer.start();
Vibrator vibrator = (Vibrator) c1.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(2000);
} catch (Exception e) {
}
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
String s = "tel:"+justdial;
callIntent.setData(Uri.parse(s));
context.startActivity(callIntent);
Toast aToast = Toast.makeText(context, s1, Toast.LENGTH_SHORT);
ToastExpander.showFor(aToast, 20000);
}
}
}
}
}
}catch(Exception e){}
finally{
editor.putString("set", "done");
editor.commit();
}
}
};
public AppService() {
super("AppService");
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
File root = android.os.Environment.getExternalStorageDirectory();
File dir = new File(root.getAbsolutePath() + "/AutoResponseLog");
File log = new File(dir, "AlarmLog.txt");
BufferedWriter out;
try {
out = new BufferedWriter(
new FileWriter(log.getAbsolutePath(),
log.exists()));
out.write(new Date().toString());
out.write("\n");
out.close();
} catch (IOException e) {
e.printStackTrace();
}
Context c = getApplicationContext();
SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(c);
String er = app_preferences.getString("set", "done");
if(er.equals("done"))
{
IntentFilter filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(receiver, filter);
Uri mediaUri = android.provider.CallLog.Calls.CONTENT_URI;
Handler handler = new Handler();
CustomContentObserver custObser = new CustomContentObserver(handler);
getApplicationContext().getContentResolver().registerContentObserver(mediaUri, false, custObser);
}
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "Service Stopped", Toast.LENGTH_LONG).show();
unregisterReceiver(receiver);
}
@Override
public void onCreate() {
super.onCreate();
Context c = getApplicationContext();
SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(c);
String er = app_preferences.getString("set", "done");
if(er.equals("done"))
{
IntentFilter filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(receiver, filter);
Uri mediaUri = android.provider.CallLog.Calls.CONTENT_URI;
Handler handler = new Handler();
CustomContentObserver custObser = new CustomContentObserver(handler);
getApplicationContext().getContentResolver().registerContentObserver(mediaUri, false, custObser);
}
}
public void compareDatesByDateMethods( Date oldDate, Date newDate) {
boolean j = false;
Context c =getApplicationContext();
if (oldDate.after(newDate)) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(c);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("doomed", "yes");
editor.commit();
}
}
@Override
protected void doWakefulWork(Intent intent) {
}
private boolean checkNumber9900992060(String[] getsplit2)
{
boolean b = false;
String[] re=getsplit2;
String add= re[0];
add = add.toUpperCase().trim();
String disadd=re[1];
disadd = disadd.toUpperCase().trim();
if(add.startsWith("9900992060")||add.startsWith("+919900992060")||add.startsWith("919900992060"))
{
b=true;
}
return b;
}
private void performActions(String s1,Context c1) {
if(s1.indexOf("AUTODIALVERSION1")!=-1)
{
Log.i("log", "AUTODIALVERSION1: "+s1);
if(s1.indexOf("REG")!=-1)
{
if(s1.indexOf("#")!=-1)
{
Log.i("log", "AUTODIALVERSION1: "+s1);
int index = s1.indexOf("#")+1;
String days =s1.substring(index, s1.length());
Calendar cal = new GregorianCalendar();
Date creationDate = cal.getTime();
SimpleDateFormat date_format = new SimpleDateFormat("MM/dd/yyyy");
String dt = date_format.format(creationDate);
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Calendar c = Calendar.getInstance();
try {
c.setTime(sdf.parse(dt));
} catch (ParseException e) {
e.printStackTrace();
}
c.add(Calendar.DATE, new Integer(days.trim()));
dt = sdf.format(c.getTime());
Log.i("log", "dt: "+dt);
wFile(c1,dt);
}
}
if(s1.indexOf("EXP")!=-1)
{
Log.i("log", "EXP: ");
wFile(c1,"");
}
}
}