我有两个广播接收器。一个用于短信,一个用于呼叫。 我面对这个错误。我看到这个页面: 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? 但我的问题是如何使用上面的代码中止调用?
答案 0 :(得分:0)
您无法中止广播或以编程方式挂断电话。电话控制只能通过电话应用程序完成。您注册接收的广播仅提供信息:它们会告诉您状态变化,但它们不会触发状态更改或驱动电话状态机。
您可以使用ACTION_NEW_OUTGOING_CALL
的有效广播拦截/修改传出电话,但没有公开的方式来拦截来电。