gpt4 book ai didi

android - PhoneStateListener 和 BroadcastReceiver

转载 作者:行者123 更新时间:2023-11-29 21:50:34 26 4
gpt4 key购买 nike

我创建了一个 BroadcastReceiver 来监听他的电话状态并采取相应的行动。

这里的问题是它似乎没有从我的数据库中获取正确的值,并且从一开始处于空闲状态的 toast 显示两次,第二次调用后显示四次等等......

我想我的类(class)有问题,但我不知道是什么......

这是一个代码 fragment :

public class PhoneListener extends BroadcastReceiver{

private DBAdapter db;
private Cursor data;
private Cursor options;
private int activer;
private int mouvement;
private int verticalite;

@Override
public void onReceive(Context context, Intent intent) {

TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(new CustomPhoneStateListener(context), PhoneStateListener.LISTEN_CALL_STATE);

}

public void stopService(Context context){
Intent alerte = new Intent(context, SensorOrientation.class);
alerte.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.stopService(alerte);
}

public void startService(Context context){
Intent alerte = new Intent(context, SensorOrientation.class);
alerte.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startService(alerte);
}

public void startnotif(Context context){
Intent intent = new Intent(context, SecuriteHauteReboot.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startService(intent);
}

public class CustomPhoneStateListener extends PhoneStateListener {

//private static final String TAG = "PhoneStateChanged";
Context context; //Context to make Toast if required
public CustomPhoneStateListener(Context context) {
super();
this.context = context;
}

@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);

switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
db = new DBAdapter(context);
data = db.selectWidget();
options = db.selectVerticalite();
activer = data.getInt(data.getColumnIndex("activer"));
mouvement = options.getInt(options.getColumnIndex("activer_alarme_mouvement"));
verticalite = options.getInt(options.getColumnIndex("activer_alarme_verticalite"));
data.close();
options.close();
//when Idle i.e no call
Toast.makeText(context,
String.format(" "+mouvement+" "+activer),
Toast.LENGTH_SHORT).show();
if(activer == 1){
if(mouvement == 1 || verticalite == 1){
Toast.makeText(context,
String.format("and I'm here...."),
Toast.LENGTH_SHORT).show();
startService(context);
startnotif(context);
}
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
//when Off hook i.e in call
//Make intent and start your service here
if (activer == 1){
if(mouvement == 1 || verticalite == 1){
stopService(context);
}
}
break;
case TelephonyManager.CALL_STATE_RINGING:
//when Ringing
if (activer == 1){
if(mouvement == 1 || verticalite == 1){
Toast.makeText(context,
String.format("and I'm here...."),
Toast.LENGTH_SHORT).show();
stopService(context);
}
}
break;
default:
break;
}
}
}
}

最佳答案

您可能在 onCallStateChanged(数据库 I/O 操作)中做了很多事情。我在此处的 BroadcastReceiver 遇到了类似的问题:Changing ringer volume during ringing .对于测试,请尝试在 BroadcastReceiver 中对静态字段(而不是 LiteSQL)进行操作,并检查它是否有帮助。

关于android - PhoneStateListener 和 BroadcastReceiver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14503414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com