ブロードキャストを正常にキャッチし、番号が要件を満たしている場合は、この呼び出し要求を終了して別の要求を作成します。つまり、ユーザー選択ポップアップを許可するために、私の 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の何かから機能しており、ユーザーが「デフォルト」を「電話」に設定することを選択した場合、ブロードキャストレシーバーに悪影響はありません;) Jelly beanエミュレーターテストも正常に機能しますが、Galaxy S3 with Jelly豆はしません!同じ問題を抱えていて、解決策を見つけた人はいますか?