[英]Alarm Manager not Triggering Service
我被一个简单的警报管理器困住了几天。 警报管理器预计会启动一项服务,但问题是它没有启动该服务。
我的主要活动:
public class MainActivity extends Activity {
private Button start
private Button stop
@Override
protected void onCreate (Bundle _savedInstanceState){
super.onCreate (_savedInstanceState);
setContentView(R.layout.main);
initialize(_savedInstanceState);
initializeLogic();
}
private void initialize(Bundle _savedInstanceState) {
start = (Button) findByViewId(R.id.start);
stop = (Button) findByViewId(R.id.stop);
start.setOnClickListener(new View.onClickListener(){
@Override
public void onClick(View _view){
startAlert();
}});
stop.setOnClickListener(new View.onClickListener(){
@Override
public void onClick(View _view){
stopAlert();
}});
private void initializeLogic(){}
@Override
protected void onActivityResult(int _requestCode, int _resultCode, Intent _data){
super.onActivityResult(_requestCode, _resultCode, _data);
switch (_requestCode){
default:
break;
}}
public void startAlert() {
int i = 5;
Intent intent = new Intent(this, MyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (i * 1000), pendingIntent);
Toast.makeText(this, "Alarm set in " + i + " seconds", Toast.LENGTH_LONG).show();
}
public void stopAlert() {
Intent intent = new Intent(this, MyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
Toast.makeText(this, "Alarm stopped", Toast.LENGTH_LONG).show();
}
}
我的BroadcastReceiver :
public class MyBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Toast.makeText(context, "Intent received", Toast.LENGTH_LONG).show();
Intent intent = new Intent(this, MyService.class);
context.startService(intent);
}
}
我的服务:
public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "onStartCommand Called", Toast.LENGTH_LONG).show();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "onDestroy Called", Toast.LENGTH_LONG).show();
}
}
我已经在清单中注册了服务和 BroadcastReceiver。 根据有关 stackoverflow 的一些建议,我尝试了“MyService”(没有。),但它仍然无法正常工作。
<service android:name=".MyService" />
<receiver android:name=".MyBroadcastReceiver" />
我在这个论坛或其他网站上尝试了一些可用的例子,但没有什么对我有用。 谁能强调我做错了什么?
您可以尝试以下代码,首先检查您是否已注册广播接收器和服务,如下所示:
<service android:name="YOUR_PACKAGE_NAME.MyService"/>
<receiver android:name="YOUR_PACKAGE_NAME.MyBroadcastReceiver"/>
您还应该检查 MainActivity.java class 中是否缺少一些大括号。 您可以将其与以下代码进行比较以供参考
public class MainActivity extends AppCompatActivity {
private Button start;
private Button stop;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialize(savedInstanceState);
}
private void initialize(Bundle savedInstanceState)
{
start = (Button) findViewById(R.id.start);
stop = (Button) findViewById(R.id.stop);
start.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
startAlert();
}
});
stop.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
stopAlert();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode)
{
}
}
public void startAlert() {
int i = 5;
Intent intent = new Intent(this, MyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (i * 1000), pendingIntent);
Toast.makeText(this, "Alarm set in " + i + " seconds", Toast.LENGTH_LONG).show();
}
public void stopAlert() {
Intent intent = new Intent(this, MyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
Toast.makeText(this, "Alarm stopped", Toast.LENGTH_LONG).show();
}
}
最后,您需要对 BroadcastReceiver class 进行细微调整,其中意图名称 object 应更改为除intent
之外的其他名称,如下所示:
public class MyBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Toast.makeText(context, "Intent received", Toast.LENGTH_LONG).show();
Intent serviceIntent = new Intent(context, MyService.class);
context.startService(serviceIntent);
}
}
希望这可以解决您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.