-1

Here, I'm creating a application to start flash when an sms is recieved and an incoming call is recieved. The flash is working on recieving sms but not on call, why? Can anyone help? I'm stuck on this since many days. Thanks in advance, my code is given below. Flash only performs on recieving sms but not on recieving calls. Expecting your guidence. When I searched regarding this I am getting only the Classes and methods to create my own app. Requesting for the explanation

public class SMSReceiver extends BroadcastReceiver {
        Boolean call;
        private Camera camera;
        int count;
        long delaytime;
        Editor editor;
        String flashtype;
        private boolean hasFlash;
        private boolean isFlashOn;
        private boolean isFlashblinking;
        private boolean mActive;
        private Handler mHander;
        private final Runnable mRunnable;
        private boolean mSwap;
        private Context mcontext;
        AudioManager myAudioManager;
        String noofblinks;
        int numbofblink;
        Parameters params;
        SharedPreferences pref;
        StringBuilder result;
        Boolean ring;
        Boolean silent;
        Boolean sms;
        String timetoblink;
        Boolean vibrate;

        public class PhoneListener extends PhoneStateListener {
            private Context context;

            public PhoneListener(Context c) {
                Log.i("CallRecorder", "PhoneListener constructor");
                this.context = c;
            }

            public void onCallStateChanged(int state, String incomingNumber) {
                switch (state) {
                case 0:
                    try {
                        SMSReceiver.this.mHander
                                .removeCallbacks(SMSReceiver.this.mRunnable);
                        if (SMSReceiver.this.camera != null) {
                            SMSReceiver.this.camera.release();
                        }
                    } catch (Exception e) {
                        try {
                            SMSReceiver.this.camera.release();
                        } catch (Exception e2) {
                        }
                    }
                case 1:
                    try {
                        if (SMSReceiver.this.call.booleanValue()) {
                            if (SMSReceiver.this.myAudioManager.getRingerMode() == 0
                                    && SMSReceiver.this.silent.booleanValue()) {
                                SMSReceiver.this.flash();
                            }
                            if (SMSReceiver.this.myAudioManager.getRingerMode() == 1
                                    && SMSReceiver.this.vibrate.booleanValue()) {
                                SMSReceiver.this.flash();
                            }
                            if (SMSReceiver.this.myAudioManager.getRingerMode() == 2
                                    && SMSReceiver.this.ring.booleanValue()) {
                                SMSReceiver.this.flash();
                            }
                        }
                    } catch (Exception e3) {
                    }
                case 2:
                    try {
                        SMSReceiver.this.mHander
                                .removeCallbacks(SMSReceiver.this.mRunnable);
                        if (SMSReceiver.this.camera != null) {
                            SMSReceiver.this.camera.release();
                        }
                    } catch (Exception e4) {
                        try {
                            SMSReceiver.this.camera.release();
                        } catch (Exception e5) {
                        }
                    }
                default:
                }
            }
        }

        public SMSReceiver() {
            this.mHander = new Handler();
            this.mActive = false;
            this.mSwap = true;
            this.isFlashblinking = true;
            this.count = 0;
            this.mRunnable = new Runnable() {

                @Override
                    // TODO Auto-generated method stub
                    public void run() {
                        try {
                            SMSReceiver sMSReceiver = SMSReceiver.this;
                            sMSReceiver.count++;
                        } catch (Exception e) {
                        }
                        if (SMSReceiver.this.mActive) {
                            if (SMSReceiver.this.count >= SMSReceiver.this.numbofblink * 2) {
                                try {
                                    SMSReceiver.this.mHander
                                            .removeCallbacks(SMSReceiver.this.mRunnable);
                                    SMSReceiver.this.camera.release();
                                } catch (Exception e2) {
                                }
                            }
                            if (SMSReceiver.this.isFlashOn) {
                                SMSReceiver.this.turnOffFlash();
                            } else {
                                SMSReceiver.this.turnOnFlash();
                            }
                            try {
                                SMSReceiver.this.mHander.postDelayed(
                                        SMSReceiver.this.mRunnable,
                                        SMSReceiver.this.delaytime);
                            } catch (Exception e3) {
                            }
                        }
                    }
            };
        }

        public void onReceive(Context context, Intent intent) {
            try {
                this.mcontext = context;
                this.count = 0;
                try {
                    this.pref = PreferenceManager
                            .getDefaultSharedPreferences(this.mcontext);
                    this.editor = this.pref.edit();
                    this.call = Boolean.valueOf(this.pref.getBoolean("call", true));
                    this.sms = Boolean.valueOf(this.pref.getBoolean("sms", true));
                    this.timetoblink = this.pref.getString("blinktime", "200");
                    this.noofblinks = this.pref.getString("noofblinks", "5");
                    this.ring = Boolean.valueOf(this.pref.getBoolean("ring", true));
                    this.vibrate = Boolean.valueOf(this.pref.getBoolean("vibrate",
                            true));
                    this.silent = Boolean.valueOf(this.pref.getBoolean("silent",
                            true));
                    this.flashtype = this.pref.getString("flashtype", "1");
                    this.delaytime = Long.parseLong(this.timetoblink);
                    this.numbofblink = Integer.parseInt(this.noofblinks);
                    this.myAudioManager = (AudioManager) this.mcontext
                            .getSystemService("audio");
                } catch (Exception e) {
                }
                ((TelephonyManager) this.mcontext.getSystemService("phone"))
                        .listen(new PhoneListener(context), 32);
            } catch (Exception e2) {
            }
        }

        public void flash() {
            try {
                this.hasFlash = this.mcontext.getPackageManager().hasSystemFeature(
                        "android.hardware.camera.flash");
                if (this.hasFlash) {
                    getCamera();
                    startStrobe();
                    return;
                }
                AlertDialog alert = new Builder(this.mcontext).create();
                alert.setTitle("Error");
                alert.setMessage("Sorry, your device doesn't support flash light!");

                alert.setButton("OK", new OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub

                    }
                });
                alert.show();
            } catch (Exception e) {
            }
        }

        private void getCamera() {
            if (this.camera == null) {
                try {
                    this.camera = Camera.open();
                    this.params = this.camera.getParameters();
                } catch (Exception e) {
                    Log.e("Camera Error. Failed to Open. Error: ", e.getMessage());
                }
            }
        }

        private void turnOnFlash() {
            try {
                if (!this.isFlashOn && this.camera != null && this.params != null) {
                    this.params = this.camera.getParameters();
                    if (this.flashtype.equals("2")) {
                        this.params.setFlashMode("torch");
                    } else if (this.flashtype.equals("3")) {
                        this.params.setFlashMode("torch");
                    } else {
                        this.params.setFlashMode("torch");
                    }
                    this.camera.setParameters(this.params);
                    this.camera.startPreview();
                    this.isFlashOn = true;
                }
            } catch (Exception e) {
            }
        }

        private void turnOffFlash() {
            try {
                if (this.isFlashOn && this.camera != null && this.params != null) {
                    this.params = this.camera.getParameters();
                    this.params.setFlashMode("off");
                    this.camera.setParameters(this.params);
                    this.camera.stopPreview();
                    this.isFlashOn = false;
                }
            } catch (Exception e) {
            }
        }

        private void startStrobe() {
            try {
                this.mActive = true;
                this.mHander.post(this.mRunnable);
            } catch (Exception e) {
            }
        }
    }
Cœur
  • 37,241
  • 25
  • 195
  • 267

2 Answers2

0

This is doable

follow this link for the same

http://androidexample.com/Incomming_Phone_Call_Broadcast_Receiver__-_Android_Example/index.php?view=article_discription&aid=61

Sourabh Saldi
  • 3,567
  • 6
  • 34
  • 57
0

Make a broadcast receiver to know about incoming call

write that code in AndroidManifes.xml

<receiver android:name=".ServiceReceiver" >
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>

and make a new a class like that.

public class ServiceReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, Intent intent) {
        TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
        telephony.listen(new PhoneStateListener(){
            @Override
            public void onCallStateChanged(int state, String incomingNumber)            {
       if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){
    // Run the flash in that line
        }

            }
        },PhoneStateListener.LISTEN_CALL_STATE);
    }
}
iub iub
  • 94
  • 6