1

I have done the call recording in my application and am calling one Activity when the phone is in Ringing state.In that Activity just am showing the phone number and person name. For that I have written the code in my class which it extends BroadcastReceiver.

This scenario is working fine when I use the application. But If I close the application then am getting Unfortunately stopped

This is my AndroidManifest.xml.

<receiver android:name="com.domyhome.broadcastreceiver.IncomingCallInterceptor" >
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
 </receiver>

This is my onRecive method. When am using my application If i get a call then the current activity is not going to the background. So I have written the code to finish the Activity.

@Override
public void onReceive(Context context, Intent intent) {
     LoginActivity.login.finish();
     MainActivity.main.finish();
     telephonyRegister(context,intent);
 }

This is the functionality. I'am calling the ProjectDailogActivity when the phone state is Ringing. I'am finishing the same Activity when the call is attended or ended.

public void telephonyRegister(final Context context, Intent intent)
{
    TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);                      
  ctx=context;
  if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
         TelephonyManager.EXTRA_STATE_IDLE)) {  
     try
     {
     ProjectDailogActivity.projdialog.finish();
     }catch(Exception e)
     {
         e.printStackTrace();
     }

     if(ring==true&&callReceived==false)
     {
         Toast.makeText(context, "THIS IS MISSED CALL FROM"+phoneNumber, Toast.LENGTH_LONG).show();
         String smsmessage = "Thanks for contacting us. We will get back you soon";
         SmsManager smsManager = SmsManager.getDefault();
         smsManager.sendTextMessage(phoneNumber, null, "Dear Customer!"+" "+smsmessage, null, null);
         Log.i("sms",smsmessage);
         Toast.makeText(context, "SMS sent.",
         Toast.LENGTH_LONG).show();     
         callReceived=false;

     }
     else if(callReceived==true)
     {  
         try
         {
         ProjectDailogActivity.projdialog.finish();
         }catch(Exception e)
         {
             e.printStackTrace();
         }

         if(Conntact.isAvailable(phoneNumber))
         {
            try{
                  myAudioRecorder.release();
                  myAudioRecorder.stop();
                  myAudioRecorder = null;
            }
            catch(Exception e)
            {
                System.out.print("error");
            }       
            Toast.makeText(context,"Recording Stopped", Toast.LENGTH_SHORT).show();
     }
     }

    }
 else if(intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
         TelephonyManager.EXTRA_STATE_OFFHOOK))
 {
     try{
         ProjectDailogActivity.projdialog.finish();
         }catch(Exception e)
         {
             e.printStackTrace();
         }
        dir = Environment.getExternalStorageDirectory();
         try {
            file = File.createTempFile("sound", ".mp3", dir);  
           } catch (IOException e) {  
               e.printStackTrace();
             return;  
           }    
              myAudioRecorder = new MediaRecorder();
              myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
              myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
              myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
              myAudioRecorder.setOutputFile(file.getAbsolutePath());
     if(Conntact.isAvailable(phoneNumber))
     {
        callReceived = true;
         ring=false;
     try {
         myAudioRecorder.prepare();
         myAudioRecorder.start();
      } catch (IllegalStateException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }
      Toast.makeText(context, "recording started", Toast.LENGTH_SHORT).show();
     }
     else
     {

     }

 }
 else if(intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
         TelephonyManager.EXTRA_STATE_RINGING)){
     phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
     ring = true;
     System.out.println("phonenum"+Conntact.isAvailable(phoneNumber));
     if(!Conntact.isAvailable(phoneNumber))
     {
         Toast.makeText(ctx, phoneNumber+"not available", Toast.LENGTH_SHORT).show();
     }
     else if(Conntact.isAvailable(phoneNumber))
     {
         Intent intent11 = new Intent(ctx,ProjectDailogActivity.class);
         intent11.putExtra("incoming_number",phoneNumber);
         intent11.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         ctx.startActivity(intent11);

     }

 } 

 }

Conntact is a table where already some numbers has been stored. So when I get a call just am checking whether the calling number is available in the Conntact table.

If it is available then show the ProjectDailogActivity. If the number is available and the call is also picked means then do the recording. Everything is working fine . But it shows Unfortunately stopped when my app is not in use.

user3764346
  • 129
  • 2
  • 5
  • 15

1 Answers1

3

Consider unregistering for broadcast events while quitting from your app,Click here for a SO answer on same issue

Community
  • 1
  • 1