在我的应用程序中,当用户拒绝呼叫时拦截是很好的,即选择发送忙音。 除了在有来电时收到通知,还有什么办法可以做到这一点吗? 我没有在文档中找到任何关于此的内容。 这些信息是否存储在通话记录中,即我是否可以轮询通话记录以查看通话是否被拒绝或接听?
答案 0 :(得分:5)
嘿。
您可以使用PhoneStateListener
和CallLog
类查询最近的呼叫列表,以查找被拒绝的呼叫。
http://developer.android.com/reference/android/provider/CallLog.html http://developer.android.com/reference/android/telephony/PhoneStateListener.html
或者,您可以监控android.intent.action.NEW_OUTGOING_CALL
和android.intent.action.NEW_INCOMING_CALL
上的广播
只需将android.permission.PROCESS_INCOMING_CALLS
和android.permission.PROCESS_OUTGOING_CALLS
放入清单。
答案 1 :(得分:1)
经过很长一段时间,搜索和逻辑解决了这个问题,我得到了解决方案:
问题:如果我打电话给某个人,如果我的电话未被该人接受,在我身边我必须出示敬酒,我的电话被拒绝 < / p>
解决方案: 创建一个通过两个动作注册的接收器
android.intent.action.NEW_OUTGOING_CALL android.intent.action.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_PHONE_STATE"/>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
Manifast.xml
<receiver android:name="Call_Receiver">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver>
你的BroadcastReceiver类
* Call_Receiver.java *
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;
/**
*
*/
public class Call_Receiver extends BroadcastReceiver {
private Context ctx;
@Override
public void onReceive(Context context, Intent intent) {
ctx = context;
OutgoingIncomingCallListener phoneListener = new OutgoingIncomingCallListener();
TelephonyManager telephony = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
if (intent.getAction()
.equals("android.intent.action.NEW_OUTGOING_CALL")) {
Log.i("", " :::::::::::: inside onReceive if &&&&&& :::::::::::::");
telephony.listen(phoneListener,
PhoneStateListener.LISTEN_CALL_STATE);
}
}
class OutgoingIncomingCallListener extends PhoneStateListener {
public boolean wasRinging;
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
Log.i("", " ************ RINGING ********");
wasRinging = true;
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.i("", " *********** OFFHOOK ********");
if (!wasRinging) {
// Start your new activity
Log.i("", " *********** if ********");
} else {
// Cancel your old activity
Log.i("", " *********** else ********");
}
// this should be the last piece of code before the break
wasRinging = true;
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.i("", " ::::::::::: IDLE :::::::::");
// this should be the last piece of code before the break
// Log.i("", " *********** OFFHOOK ********");
if (wasRinging) {
Toast.makeText(ctx,
"Your call is disconnected by receiver", 10000)
.show();
}
wasRinging = true;
break;
}
}
}
}
当你打电话不接受时,这会显示Toast。
答案 2 :(得分:0)
如果使用android.intent.action.NEW_INCOMING_CALL
怎么办?
当您拒绝来电时,callstate
会从响铃变为空闲。这意味着你被拒绝了。
如果通话状态从OFFHOOK
更改为空闲,则表示您接听了电话。