1

我成功捕捉到广播,如果号码确实满足要求,我终止此呼叫请求并发出另一个请求,即允许用户选择弹出窗口,我的 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豆没有!有没有人遇到过同样的问题并找到了解决方案?

4

0 回答 0