我明天有很多作业,但我只完成了一件事。基本上我需要做的是计算传入我手机的短信数量。例如,如果有人向我发送一条短信,上面写着“A”,程序会对其进行计数,并弹出一条提示消息:“Answer A”:1,当另一条短信到来时,它将显示“Answer A”:2。我做了一些代码工作,但即使我发送了 20 条“A”短信,它也显示为 1。我认为它会在计算第一条短信后自行重置。这是我的代码。
public class SmsAlici extends BroadcastReceiver {
public int sayacA = 0, sayacB = 0, sayacC = 0, sayacD = 0;
public int toplam = 0;
@Override
public void onReceive(Context context, Intent intent)
{
SmsMessage[] mesaj = Telephony.Sms.Intents.getMessagesFromIntent(intent);
SmsMessage sms = mesaj[0];
String gonderen = sms.getOriginatingAddress();
String sms_icerik = sms.getMessageBody();
sms_icerik = sms_icerik.trim();
if (sms_icerik.equalsIgnoreCase("A")) {
sayacA++;
toplam++;
Toast.makeText(context, "A Cevabı:" + Integer.toString(sayacA), Toast.LENGTH_LONG).show();
} else if (sms_icerik.equalsIgnoreCase("B")) {
sayacB++;
toplam++;
Toast.makeText(context, "B Cevabı:" + Integer.toString(sayacB), Toast.LENGTH_LONG).show();
} else if (sms_icerik.equalsIgnoreCase("C")) {
sayacC++;
toplam++;
Toast.makeText(context, "C Cevabı:" + Integer.toString(sayacC), Toast.LENGTH_LONG).show();
} else if (sms_icerik.equalsIgnoreCase("D")) {
sayacD++;
toplam++;
Toast.makeText(context, "D Cevabı: " + Integer.toString(sayacD), Toast.LENGTH_LONG).show();
}
if (toplam == 20) {
Toast.makeText(context, "A Cevabı Toplamı: " + Integer.toString(sayacA), Toast.LENGTH_LONG).show();
Toast.makeText(context, "B Cevabı Toplamı: " + Integer.toString(sayacB), Toast.LENGTH_LONG).show();
Toast.makeText(context, "C Cevabı Toplamı: " + Integer.toString(sayacC), Toast.LENGTH_LONG).show();
Toast.makeText(context, "D Cevabı Toplamı: " + Integer.toString(sayacD), Toast.LENGTH_LONG).show();
toplam = 0;
最佳答案
在您收到每条短信后,Android 可能会实例化您的类的一个新实例。
更改:
public int sayacA = 0, sayacB = 0, sayacC = 0, sayacD = 0;
至:
public static int sayacA = 0, sayacB = 0, sayacC = 0, sayacD = 0;
但是,最好的解决方案是将这些值保留在 SharedPreferences 上。这样,您就可以防止应用程序被终止时丢失数据。
关于javascript - 我认为 BroadcastReceiver 会自行重置,我需要它在不重置的情况下运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37602282/