BroadcastReceiver尝试在无序广播错误期间返回结果

时间:2015-09-24 10:32:59

标签: android eclipse broadcastreceiver

我有两个广播接收器。一个用于短信,一个用于呼叫。 我面对这个错误。我看到这个页面: BroadcastReceiver trying to return result during a non-ordered broadcast - SMS Receiver

但我不知道如何使用这个建议。 Context.sendOrderedBroadcast。 如果这有用或没有。我在这个包中有其他接收器用于sms这个接收器工作正常。但这个不起作用。

public class PhoneCallReceiver extends BroadcastReceiver {
 Context context = null;
 SharedPreferences preferences = null ;
    Boolean  blacklist;
    Boolean  contact;
    Boolean  all;



 public void onReceive(Context context, Intent intent) {


     preferences = context.getSharedPreferences("modes",Context.MODE_PRIVATE);

     if (intent.getAction().equals("android.intent.action.PHONE_STATE")) { 

           String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);





if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
String phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);

          if (preferences.getBoolean("all", true)){ 
                     Log.i("all", ":  " + phoneNumber);
                     abortBroadcast();

                     Log.i("block: ", phoneNumber);

          }

           else      if (preferences.getBoolean("blacklist", true)){
                     boolean str=Search.search(phoneNumber);
                     if (phoneNumber != null && str ==true) {
                     abortBroadcast();}}




           else     if (preferences.getBoolean("c", true)&&getDetails(phoneNumber)){
                     abortBroadcast();}





           else     if (preferences.getBoolean("g", true)){
                    boolean str=SearchInWhiteList.search(phoneNumber);
                    if (phoneNumber != null && str ==true) {
                    abortBroadcast();}}




            else      if (preferences.getBoolean("b", true)){
                         abortBroadcast();}





            else {}
            }

        }

 } 

清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="blocker.activity"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> 

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>

  <uses-sdk android:minSdkVersion="8" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity

        android:name=".FirstPage"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

<receiver android:name=".SmsFilter" android:enabled="true">
<intent-filter android:priority="999">


    <action android:name="android.intent.action.PHONE_STATE" />
    <action android:name="bloker.activity.android.action.broadcast"/> 
    <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
</intent-filter>
</receiver>

<receiver android:name=".PhoneCallReceiver" android:enabled="true">
<intent-filter android:priority="999">


    <action android:name="android.intent.action.PHONE_STATE" />
    <action android:name="bloker.activity.android.action.broadcast"/> 
 </intent-filter>
</receiver>

    <activity

        android:name=".Search"
        android:label="@string/app_name" >

    </activity>

    <activity

        android:name=".BlockActivity"
        android:label="@string/app_name" >

    </activity>


    <activity
        android:name=".SmsFilter"
        android:label="@string/app_name" >

    </activity>


    <activity
        android:name=".CustomAdapter"
        android:label="@string/app_name" >

    </activity>


    <activity
        android:name=".Setting"
        android:label="@string/app_name" >

    </activity>

    <activity
        android:name=".GetAllContact"
        android:label="@string/app_name" >

    </activity>

     <activity
        android:name=".WhiteList"
        android:label="@string/app_name" >

    </activity>
</application>

</manifest>

编辑: broadcastreceiver来自Android手机的来电是非订购的。所以不能使用上面的代码中止。我的问题是我们如何处理这种广播? 我知道使用此代码可以阻止调用。 Can I hang up a call programmatically in android? 但我的问题是如何使用上面的代码中止调用?

1 个答案:

答案 0 :(得分:0)

您无法中止广播或以编程方式挂断电话。电话控制只能通过电话应用程序完成。您注册接收的广播仅提供信息:它们会告诉您状态变化,但它们不会触发状态更改或驱动电话状态机。

您可以使用ACTION_NEW_OUTGOING_CALL的有效广播拦截/修改传出电话,但没有公开的方式来拦截来电。