Reputation: 933
I have this code and my app is not detecting the incoming calls.
My code is very similar with this answer what am i doing wrong?
How does a Android "OS" detect a incoming call
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.reporting2you.r2ym">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name="com.reporting2you.services.FloatingViewService"
android:enabled="true"
android:exported="false" />
<activity android:name=".FloatingActivity" />
<receiver
android:name="com.reporting2you.broadcastReceiver.CallReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
</application>
</manifest>
BroadcastReceiver
public class CallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (extras != null) {
String state = extras.getString(TelephonyManager.EXTRA_STATE);
Log.w("MY_DEBUG_TAG", state);
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
context.startActivity(new Intent(context, FloatingActivity.class));
((MainActivity)context).finish();
String phoneNumber = extras
.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
Log.w("MY_DEBUG_TAG", phoneNumber);
}
}
}
}
Upvotes: 1
Views: 2976
Reputation: 10162
If you use android.intent.action.PHONE_STATE
you need to request READ_PHONE_STATE
permission first.
Because android.permission.READ_PHONE_STATE
is dangerous level permission, so you must checkSelfPermission()
in run time.
If not the broadcast will not be triggered when running on device with Android version above Marshmallow (23).
See: Requesting Permissions at Run Time
Upvotes: 3
Reputation: 814
Try
public class CallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (extras != null) {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); //Change Here
Log.w("MY_DEBUG_TAG", state);
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
context.startActivity(new Intent(context, FloatingActivity.class));
((MainActivity)context).finish();
String phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); //Change Here
Log.w("MY_DEBUG_TAG", phoneNumber);
}
}
}
}
Upvotes: 2