wie man eine Aktivität anruft, wenn ein Anruf eingeht.

Hallo zusammen, ich möchte meine eigene Aktivität über die Standardaktivität für eingehende Anrufe aufrufen. Ich habe dies mit Rundfunkempfängern getan. Ich rufe meine Aktivität auf, wenn ich einen eingehenden Anruf erhalte. Aber es funktioniert zum ersten Mal gut, ab dem zweiten Mal, wenn ich einen eingehenden Anruf erhalte, geht die Standardaktivität für eingehende Anrufe über meine Aktivität. Ich weiß nicht, was das Problem ist. Kann mir jemand helfen?

Manifest:

<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>

Java Code:

<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>

Antworten auf die Frage(2)

Ihre Antwort auf die Frage