Java 当我的应用程序关闭时,当引用另一个类中的静态方法时,扩展BroadcastReceiver的类中的字符串将返回null
我正在创建一个具有短信发送功能的应用程序。我目前遇到一个问题,涉及调用扩展BroadcastReceiver的类的AlarmManager(功能正常)。使用AlarmManager的类是MainMenu.class,扩展BroadcastReceiver的类是AlarmReceiver.class 在MainMenu类中,用户输入电话号码和信息。在AlarmReceiver类中,我试图通过访问getPhoneNumber()方法和getMessage()方法来发送sms。当我这样做并且应用程序关闭时,电话号码和消息都会返回null到AlarmReceiver类,即使它正在访问MainMenu类中的静态方法 以下是MainMenu.class中AlarmManager的代码:Java 当我的应用程序关闭时,当引用另一个类中的静态方法时,扩展BroadcastReceiver的类中的字符串将返回null,java,android,static,broadcastreceiver,alarmmanager,Java,Android,Static,Broadcastreceiver,Alarmmanager,我正在创建一个具有短信发送功能的应用程序。我目前遇到一个问题,涉及调用扩展BroadcastReceiver的类的AlarmManager(功能正常)。使用AlarmManager的类是MainMenu.class,扩展BroadcastReceiver的类是AlarmReceiver.class 在MainMenu类中,用户输入电话号码和信息。在AlarmReceiver类中,我试图通过访问getPhoneNumber()方法和getMessage()方法来发送sms。当我这样做并且应用程序关
int hours, minutes;
hours = timePicker.getCurrentHour();
minutes = timePicker.getCurrentMinute();
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(System.currentTimeMillis());
cal.set(Calendar.HOUR_OF_DAY, hours);
cal.set(Calendar.MINUTE, minutes);
Intent intentAlarm = new Intent(MainMenu.this, AlarmReceiver.class);
intentAlarm.putExtra("phoneNumber", phoneNumber);
intentAlarm.putExtra("message", message);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), PendingIntent.getBroadcast(MainMenu.this, 1, intentAlarm,
PendingIntent.FLAG_CANCEL_CURRENT));
以下是AlarmReceiver类的代码:
public class AlarmReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Intent intentAlarm = new Intent();
String phoneNumber = intentAlarm.getStringExtra("phoneNumber");
String message = intentAlarm.getStringExtra("message");
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, null, null);
}//end onReceive
}//end AlarmReceiver
我甚至尝试使用SharedReferences来记住电话号码和信息,但仍然返回空值
提前谢谢
我甚至尝试使用SharedReferences来记忆
电话号码和信息,但仍返回空值
无需使用SharedReferences
或static
方式从Main菜单
class访问变量
您可以使用Intent从主菜单
向报警接收器
传递所需数据:
Intent intentAlarm = new Intent(MainMenu.this, AlarmReceiver.class);
intentAlarm.putExtra("phone_number",MainMenu.getPhoneNumber());
现在使用
phone\u number
键从intent
获取电话号码,这是AlarmReceiver类的onReceive
方法中的第二个参数。Android可以随时终止您的进程。您当时拥有的任何内存变量(包括电话号码和信息)都将丢失。我们需要查看代码的其余部分才能确定,但将数据保存到SharedReferences对象可能是一个解决方案。@Marius我理解这一点,但不是每次我都这么做。我使用此AlarmManager的全部意义在于,我可以与之抗争,这样当应用程序关闭时,我可以在后台继续处理,这样就可以在计时器上发送短信,而不会让应用程序仍然打开。AlarmManager不打算将应用程序保留在后台。它用于设置将来触发的警报,即使应用程序未运行。如果你想让一个应用程序继续运行,你可以使用后台服务之类的东西;甚至是通知栏中的前台通知。然而,即使这样也不能保证。Android仍然可以在它认为必要的任何时候杀死你的应用程序。出于您的目的,没有必要将应用程序保留在后台;只需将您的数据持久化到SharedReferences或其他持久化存储,并将其加载到您的BroadcastReceiver中即可。我以前尝试过这种方法,但我尝试使用用于调用BroadcastReceiver的意图。无论是哪种方式,我都尝试使用完全不同的意图使用putExtra()传递字符串,但在AlarmReceiver类中它们仍然为空。@saboehnke:当使用intentAlarm
intent传递数据时,您遇到了什么问题?并尝试使用pendingent.FLAG\u CANCEL\u CURRENT
标志,而不是pendingent.FLAG\u UPDATE\u CURRENT
当我使用不同的意图时,我会得到相同的错误。我发现我正在使用无效的目标地址和无效的消息。我测试发现它们都返回null。@saboehnke:为什么使用不同的意图?@saboehnke:如果可能,请更新您尝试使用意图发送数据的代码