Question

I am trying to send a broadcast to simulate an incoming call. I added the permission in AndroidManifest.xml file,

<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>

When I try to run the program, the phone reboots.(Emulator too).

  Intent intent = new Intent();
    intent.setAction("android.intent.action.PHONE_STATE");
    intent.putExtra(TelephonyManager.EXTRA_STATE, TelephonyManager.CALL_STATE_RINGING);
    intent.putExtra("EXTRA_INCOMING_NUMBER", "923982398");
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    sendBroadcast(intent);
Was it helpful?

Solution

I may be wrong as I can't find anything in the docs but I'd say it's not possible to 'spoof' a call ringing broadcast. It's almost certainly reserved as 'system only'.

Think about it - if apps could do this, it may simply result in 'mischief' rather than anything malicious but it isn't something that I'd like to happen on my phone.

Create your own 'phone ringing' action to use for testing purposes and have your BroadcastReceiver listen for it. When you come to release the app then simply change the BroadcastReceiver's intent filter to listen for the real one.

OTHER TIPS

I Downloaded some of the fake Caller Apps from play store and tested them. I found that the App Raises an Event which displays the pre-mentioned GUI on the Top of Lock Screen and adds the entry into call logs using the insert method of ContentResolver.

The app does not use the inbuild Calling (Broadcast) mechanism. it just fakes the GUI on the Screen and plays the Default Ringtone/Vibration.

As per my Knowledge, I think it is not possible to fake a call ringing broadcast

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top