0

为了学习如何使用 AlarmManager,我创建了一个由单个按钮组成的活动。当按下按钮时,活动会创建一个自身的 Intent 并在完成前 3 秒将其加载到 AlarmManager 中。

因此活动打开,用户按下按钮,活动关闭,3 秒后活动打开,重复。

问题是 3 秒后我没有打开活动,而是收到错误消息:“应用程序 [myappname] 已意外停止。请重试。” 除非我改用 Toast 来代替,否则它是有效的。

这是按钮的代码:

thanksButton.setOnClickListener(new View.OnClickListener() {
               public void onClick(View view) {
               setResult(RESULT_OK);
               Intent intent = new Intent(myappname.this,
myappnameBroadcastReceiver.class);
               PendingIntent appIntent = PendingIntent.getBroadcast
(myappname.this, 0, intent, 0);
               Calendar calendar = Calendar.getInstance();
               calendar.setTimeInMillis(System.currentTimeMillis());
               calendar.add(Calendar.SECOND, 3);
               AlarmManager am = (AlarmManager)getSystemService
(ALARM_SERVICE);
               am.set(AlarmManager.RTC, calendar.getTimeInMillis(),
appIntent);

               finish();
               }

       });

这是广播接收器:

package com.myappname;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class myappnameBroadcastReceiver extends BroadcastReceiver {
       @Override
       public void onReceive(Context context, Intent intent) {
                       context.startActivity(new Intent(context, myappname.class));
       }
}

这是 manifest.xml 中的内容

       <receiver
               android:name=".myappnameBroadcastReceiver"
               android:process=":remote">
       </receiver>
4

1 回答 1

0

因此活动打开,用户按下按钮,活动关闭,3 秒后活动打开,重复。

如果您只想在闹钟响起时开始活动,则不需要任何服务。创建一个 PendingIntent 来启动您的活动,仅此而已。在你的活动课上试试这个 -MyActivity在我的代码中。

Intent intent = new Intent(MyActivity.this, MyActivity.class);
PendingIntent appIntent = 
        PendingIntent.getActivity(MyActivity.this, 0, intent, 0);
于 2011-01-09T22:08:35.940 回答