我有一个应用程序,可以监听来电,并根据号码向该号码发送短信。所有工作都在进行中,呼叫onReceive
并发送SMS,但一旦被呼叫方或呼叫方拒绝呼叫,则再次呼叫onReceive
,并再次发送SMS。我如何限制这一点,以便只有在接到呼叫时才会调用onReceive
?
以下是我的代码的简单版本:
我的广播接收机
导入android.content.BroadcastRecector;导入android.content.上下文;导入android.content.意图;导入android.util.日志;
public class Telephone extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
Log.d("onReceive", "Got Call Signal");
}
}
在清单:
<receiver android:name="com.example.testbroadcastreceiver.Telephone" >
<intent-filter android:priority="1000" >
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
使用的权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
您可以这样逻辑地处理它:
public class ServiceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
MyPhoneStateListener phoneListener=new MyPhoneStateListener();
TelephonyManager telephony = (TelephonyManager)
context.getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);
}
}
public class MyPhoneStateListener extends PhoneStateListener {
public void onCallStateChanged(int state,String incomingNumber){
switch(state){
case TelephonyManager.CALL_STATE_IDLE:
Log.d("DEBUG", "IDLE");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d("DEBUG", "OFFHOOK");
break;
case TelephonyManager.CALL_STATE_RINGING:
Log.d("DEBUG", "RINGING");
//place your sms code here
break;
}
}
}
您需要注册一个PhoneStateListener。LISTEN_CALL_仅在BroadcastReceiver内接收传入呼叫的状态为:
public class Telephone extends BroadcastReceiver {
private Context mContext;
private Intent mIntent;
@Override
public void onReceive(Context context, Intent intent) {
mContext = context;
mIntent = intent;
TelephonyManager tm = (TelephonyManager)
context.getSystemService(Context.TELEPHONY_SERVICE);
int events = PhoneStateListener.LISTEN_CALL_STATE;
tm.listen(phoneStateListener, events);
}
private final PhoneStateListener phoneStateListener =
new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
String callState = "UNKNOWN";
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
break;
case TelephonyManager.CALL_STATE_RINGING:
// DO YOUR WORK HERE
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
if(incomingNumber.length() >0){
// incoming call
// DO YOUR WORK HERE when call is received
// SEND SMS HERE
}
else{
// outgoing call
}
break;
}
super.onCallStateChanged(state, incomingNumber);
}
};
}
但是上行和下行都不起作用 当我使用上行链路或下行链路时,我的应用程序行为不端,而当我使用其他来源时,我的应用程序工作正常
问题内容: 我正在尝试进行多项选择调查,以允许用户从选项1-x中进行选择。如何做到这一点,以便用户输入除数字以外的任何字符,返回“那是无效答案”之类的内容 问题答案: 您的代码将变为: 它的工作方式是使循环无限循环,直到仅放入数字为止。因此,如果我输入“ 1”,它将破坏循环。但是如果我放“ Fooey!” 该语句将捕获“将引发的错误” ,并且该循环将循环,因为它没有被破坏。
问题内容: 我对的能力了解得越多,我就越惊讶于它的作用。这是根据我对问题的回答(使用反射更改静态最终用于单元测试)改编而成的。 你可以做真正令人发指的事情: 大概是API设计者意识到了可滥用性,但是必须承认它具有合法的用途来提供它。所以我的问题是: 真正合法的用途是什么? Java是否可以被设计为一开始就没有这种需求? 这种设计的负面后果(如果有)是什么? 你只能限制合法使用吗? 只有通过吗? 它
我有一个带有ListView的FutureBuilder来显示自定义项(小部件),其值是从。txt文件中读取的。 问题是,只有当我在调试模式或运行模式下启动应用程序时,这些项才会显示。当我试图用AppLauncher打开应用程序时(就像“普通”用户会这样做一样),listView是空的。我在一个AVD和一个“真正的”设备上试过这个。
更新:任何人都知道如何强迫另一个流到麦克风音频源。这需要原生android代码。请在这方面帮助我,请参考这个问题,以获得更多关于路由音频的详细信息
问题内容: 我在AngularJS中使用ngChange来触发自定义函数,该函数将删除用户添加到输入中的所有字母。 问题是我需要定位触发的输入,以便删除输入的字母。我已经在Google上寻找了很长时间,并且对此一无所获。 我能做什么? 问题答案: 简单的方法 ,如果适用于您的用例,请使用type =“ number” : 另一种简单的方法: ng- pattern 也可用于定义正则表达式,以限制字