大家好,我想在默认的来电活动上调用我自己的活动。我已经使用广播接收器完成了这项工作,我在接到来电时调用了我的活动。但是从我第二次接到来电时它第一次工作正常,然后默认的来电活动正在通过我的活动。我不知道是什么问题,任何人都可以帮助我..
显现:
<?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>
Java 代码:
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;
}
}
}