Cómo llamar a una actividad al recibir una llamada entrante.

Hola a todos. Quiero invocar mi propia actividad por encima de la actividad predeterminada de llamadas entrantes. He hecho esto con el uso de receptores de difusión. Estoy invocando mi actividad al recibir una llamada entrante. pero está funcionando bien por primera vez, desde la segunda vez que recibo una llamada entrante, entonces la actividad predeterminada de llamadas entrantes está llegando a mi actividad. No sé cuál es el problema. ¿Puede alguien ayudarme?

Manifiesto:

<code><?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.satish.service"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" />

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

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <receiver
        android:name="MyCallReceiver"
        android:enabled="true" >
        <intent-filter android:priority="10">
            <action android:name="android.intent.action.PHONE_STATE" >

            </action>
        </intent-filter>
    </receiver>
    <receiver
        android:name="TestReceiver"
        android:enabled="true" >
        <intent-filter android:priority="10">
            <action android:name="jason.wei.custom.intent.action.TEST" >
            </action>
        </intent-filter>
    </receiver>

    <activity
        android:name="CallActivity"
        android:clearTaskOnLaunch="true"
        android:launchMode="singleTask" >
        <intent-filter android:priority="1000"></intent-filter>
    </activity>
</application>
</manifest>
</code>

Código Java:

<code>public class MyCallReceiver extends BroadcastReceiver{
 public static final String CUSTOM_INTENT = "jason.wei.custom.intent.action.TEST";
Context context = null;
 private static final String TAG = "Phone call";



public void onReceive(Context context, Intent intent) {

    Bundle extras = intent.getExtras();
    if (extras != null) {
        String state = extras.getString(TelephonyManager.EXTRA_STATE);
        Log.w("DEBUG", state);
        if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {

                    Intent i = new Intent();
                    i.setAction(CUSTOM_INTENT);
                    context.sendBroadcast(i);

        }
    }
}
}


public class TestReceiver extends BroadcastReceiver {

public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(MyCallReceiver.CUSTOM_INTENT)) {
        System.out.println("GOT THE INTENT");
        context.startActivity(new Intent(context, CallActivity.class)
                .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
    }
}
}

public class CallActivity extends Activity implements OnClickListener{
private ITelephony telephonyService;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    setTheme(android.R.style.Theme_Dialog);
    ((Button)findViewById(R.id.call)).setOnClickListener(this);
    ((Button)findViewById(R.id.end)).setOnClickListener(this);
    TelephonyManager telephony = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);  

      try {
           Class c = Class.forName(telephony.getClass().getName());
           Method m = c.getDeclaredMethod("getITelephony");
           m.setAccessible(true);
           telephonyService = (ITelephony) m.invoke(telephony);
          } catch (Exception e) {
           e.printStackTrace();
          }
}

@Override
public void onClick(View arg0) {
    switch (arg0.getId()) {
    case R.id.call:

        telephonyService.answerRingingCall();
        break;

    case R.id.end:
        telephonyService.endCall();
        finish();
        break;

    default:
        break;
    }
}
}
</code>

Respuestas a la pregunta(2)

Su respuesta a la pregunta