有没有办法在现有使用广播接收器的应用程序后保持重复警报工作?
Is there a way to keep a repeating alarm working after existing the app that uses a broadcast receiver?
我是 Android 的新手。我正在尝试创建一个应用程序,该应用程序使用 BroadcastReceiver
在主 activity 上执行由重复警报触发的功能。我读到我必须动态注册我所做的 broadcastReceiver
- 这是为了能够在主 activity 上执行该功能。我面临的问题是,一旦应用程序退出,alarm
就会停止工作。我读到这是设计使然 - 有没有办法克服这个问题,还是我必须使用 service
?提前致谢。
示例代码:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "from AlarmReceiver", Toast.LENGTH_SHORT).show();
}
}
public class MainActivity extends AppCompatActivity {
private PendingIntent pendingIntent;
private AlarmManager manager;
private AlarmReceiver myReceiver = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myReceiver = new AlarmReceiver();
IntentFilter myIntentFilter = new IntentFilter("ANY_ACTION");
registerReceiver(myReceiver, myIntentFilter);
Intent myIntent = new Intent();
myIntent.setAction("ANY_ACTION");
pendingIntent = PendingIntent.getBroadcast(this, 0,myIntent,0);
}
public void startAlarm(View view) {
manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
int interval = 1500;
manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
Toast.makeText(this, "Alarm Set", Toast.LENGTH_LONG).show();
}
}
我认为,当您的应用不是 运行 时闹钟停止工作的原因是您在本地使用 [=13= 注册了 AlarmReceiver ].如果您想注册您的 AlarmReceiver,以便即使您的应用不是 运行,它也能继续工作,您需要在 AndroidManifest.xml
中注册它。
首先,像这样将您的接收器添加到 AndroidManifest.xml
中:
<application>
//...
<receiver android:name=".AlarmReceiver">
</receiver>
//...
</application>
然后像这样设置你的闹钟(记住:不要将闹钟间隔设置得太短,至少设置 1 分钟;你在你的代码中将你的间隔设置为 1.5 秒 - 它可能不起作用):
int interval = 60 * 1000;
Intent intent=new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
然后在 onRecieve 中触发警报时,做您想做的事:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
AudioManager audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
SharedPreferences sharedPreferences = context.getSharedPreferences("Settings", 0);
int iDefValue=0;
int iDayAlarmVal= sharedPreferences.getInt("something", iDefValue);
// and so on...
}
}
我是 Android 的新手。我正在尝试创建一个应用程序,该应用程序使用 BroadcastReceiver
在主 activity 上执行由重复警报触发的功能。我读到我必须动态注册我所做的 broadcastReceiver
- 这是为了能够在主 activity 上执行该功能。我面临的问题是,一旦应用程序退出,alarm
就会停止工作。我读到这是设计使然 - 有没有办法克服这个问题,还是我必须使用 service
?提前致谢。
示例代码:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "from AlarmReceiver", Toast.LENGTH_SHORT).show();
}
}
public class MainActivity extends AppCompatActivity {
private PendingIntent pendingIntent;
private AlarmManager manager;
private AlarmReceiver myReceiver = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myReceiver = new AlarmReceiver();
IntentFilter myIntentFilter = new IntentFilter("ANY_ACTION");
registerReceiver(myReceiver, myIntentFilter);
Intent myIntent = new Intent();
myIntent.setAction("ANY_ACTION");
pendingIntent = PendingIntent.getBroadcast(this, 0,myIntent,0);
}
public void startAlarm(View view) {
manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
int interval = 1500;
manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
Toast.makeText(this, "Alarm Set", Toast.LENGTH_LONG).show();
}
}
我认为,当您的应用不是 运行 时闹钟停止工作的原因是您在本地使用 [=13= 注册了 AlarmReceiver ].如果您想注册您的 AlarmReceiver,以便即使您的应用不是 运行,它也能继续工作,您需要在 AndroidManifest.xml
中注册它。
首先,像这样将您的接收器添加到 AndroidManifest.xml
中:
<application>
//...
<receiver android:name=".AlarmReceiver">
</receiver>
//...
</application>
然后像这样设置你的闹钟(记住:不要将闹钟间隔设置得太短,至少设置 1 分钟;你在你的代码中将你的间隔设置为 1.5 秒 - 它可能不起作用):
int interval = 60 * 1000;
Intent intent=new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
然后在 onRecieve 中触发警报时,做您想做的事:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
AudioManager audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
SharedPreferences sharedPreferences = context.getSharedPreferences("Settings", 0);
int iDefValue=0;
int iDayAlarmVal= sharedPreferences.getInt("something", iDefValue);
// and so on...
}
}