我成功捕捉到广播,如果号码确实满足要求,我终止此呼叫请求并发出另一个请求,即允许用户选择弹出窗口,我的 onReceive 在这里
@Override
public void onReceive(Context context, Intent intent) {
final String oldNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
final String newNumber = this.getResultData();
boolean useAmivox = true;
Bundle bundle = intent.getExtras();
Log.d(DTAG, "bundle: " + bundle.toString());
Log.d(DTAG, "Number: " + oldNumber );
if( oldNumber != null ){
boolean isGlobal= PhoneNumberUtils.isGlobalPhoneNumber(oldNumber);
Log.d(DTAG, "isGlobal: " + isGlobal );
boolean isIntl= PhoneNumberUtils.toaFromString(oldNumber)== PhoneNumberUtils.TOA_International ? true:false;
Log.d(DTAG, "isIntl: " + isIntl );
useAmivox = isGlobal && isIntl;
}
if( oldNumber.contains(TAG))
useAmivox=true;
if ( !oldNumber.contains(TAG) && useAmivox) {
setResult(Activity.RESULT_OK, null, null);
Intent lIntent = new Intent();
lIntent.setAction(Intent.ACTION_CALL);
lIntent.setData(Uri.parse("tel:" + oldNumber + TAG));
lIntent.putExtra(Intent.EXTRA_PHONE_NUMBER, oldNumber);
lIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(lIntent);
}else{
if (oldNumber != null)
setResult(Activity.RESULT_OK, oldNumber.replace(TAG, ""),
null);
}
}
清单是这样的
<receiver
android:name="com.amivox.callintercepttest.OutCallInterceptor"
android:enabled="true"
android:exported="true" >
<intent-filter android:priority="10" >
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
在带有果冻豆 4.1.1 的 Galaxy S3 中发生的情况是,如果用户选择电话,即不是我的应用程序,则不会进行任何呼叫,即我的广播接收器总是将结果设置为 null。此代码自 2.x 以来一直在工作,如果用户选择将“默认值”设置为“电话”,我的广播接收器没有任何负面影响;)果冻豆模拟器测试也可以正常工作,但带有果冻的 Galaxy S3豆没有!有没有人遇到过同样的问题并找到了解决方案?