我正试图使用AlarmManager
和服务向某个号码发送自动短信。我遵循了一些教程,我写了这样的东西:
SwitchPreference testPref = (SwitchPreference) findPreference("key_auto_sms");
SharedPreferences sharedPrefs = getActivity().getSharedPreferences("XXXXXXXXX", MODE_PRIVATE);
testPref.setChecked(sharedPrefs.getBoolean("AutoSMS", false));
testPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
if (testPref.isChecked()) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
int curHr = calendar.get(Calendar.HOUR_OF_DAY);
// Checking whether current hour is over 14
if (curHr >= 15)
{
// Since current hour is over 15, setting the date to the next day
calendar.add(Calendar.DATE, 1);
}
calendar.set(Calendar.HOUR_OF_DAY, 15);
calendar.set(Calendar.MINUTE, 1);
calendar.set(Calendar.SECOND, 00);
AlarmManager am = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(getActivity(), AlarmReceiver.class);
final PendingIntent pi = PendingIntent.getBroadcast(getActivity(), 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);
SharedPreferences.Editor editor = getActivity().getSharedPreferences("XXXXXXXXX", MODE_PRIVATE).edit();
editor.putBoolean("AutoSMS", true);
editor.commit();
Toast.makeText(getActivity(), getResources().getString(R.string.Auto_SMS_Enable), Toast.LENGTH_SHORT).show();
} else {
SharedPreferences.Editor editor = getActivity().getSharedPreferences("com.camel.work_list", MODE_PRIVATE).edit();
editor.putBoolean("AutoSMS", false);
editor.commit();
Toast.makeText(getActivity(), getResources().getString(R.string.Auto_SMS_Cancle), Toast.LENGTH_SHORT).show();
Intent intent1 = new Intent(getActivity(), AlarmReceiver.class);
final PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, intent1, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarm = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
alarm.cancel(pendingIntent);
//getActivity().stopService(intent1);
}
return false;
}
});
}
我的广播接收器:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// MY auto sms method.....
}
}
我错过了什么?
您不应该使用setRepeating(),因为它在时间间隔内不准确。您可以一次使用set()函数,它将更准确地工作,当广播被调用时,您可以再次调用set()(像递归一样),它将工作。这是我的闹钟集代码,它将不能与华为这样的设备一起工作,因为进程将被杀死。在华为,我使用JobScheduler。如果屏幕关闭时屏幕明亮,它工作得很好。它不能正常工作。最近有一个WorkManager库对所有设备都更好,我没有时间研究它,所以我不给任何关于WorkManager库的建议。希望能有所帮助
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
assert alarmManager != null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setAlarmClock(new AlarmManager.AlarmClockInfo(time, pendingIntent), pendingIntent);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, time, pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, time, pendingIntent);
}
我对java有点陌生,习惯于用Python编写代码。因此,当涉及到获取用户输入时,我总是对执行这样的任务需要多少行代码感到恼火。所以我尝试创建自己的类来简化这个过程。我想表演这样的节目: 控制台内部: 以下是迄今为止的代码: 当我使用该类一次时,一切正常,但当我再次尝试使用它时,我会遇到一个异常: 输出: 我真的不知道为什么总是这样。请帮帮我,谢谢。
我有一个文本“你好单词”“单词你好”,我如何获得“你好单词”“单词你好”(例如) ''' let string1="Hello Word"让引用String1="Hello Word" let string2="Word Hello"让引用String2="word Hello" '''
我正在php上研究多对多关系,我有3个表,包括电影名称和电影id的movie表genre表包括类型和类型id的movie_genre表包括电影id和类型id的movie_genre表 genre表有这些值 我使用下面的代码来获取数据 但结果将类似于 movie_id movie_name genre[1] movie_id movie_name genre[2] movie_id movie_na
我试图理解右值引用。这是我迄今为止编写的代码: 输出只有< code >“hello”,这让我很困惑。 由于 是传递给第二个构造函数的临时对象,因此代码输出就好像只调用第一个构造函数一样。 我猜这要么是编译器优化,要么我错过了关于构造函数和右值的一些细节。
假设我们有熊猫表: 我们如何删除只有“狗”一个条目的行?例如,这将是带有pom,雪橇犬的行。 谢谢!
我正在制作一个程序shell(#!/bin/sh),问题是printf只显示字符串param的第一个字。 这是为您简化的代码摘录: 此代码仅输出。