警报管理器不启动android

时间:2012-09-09 11:27:02

标签: java android alarmmanager

在我的应用程序中,我正在尝试以下功能。我希望根据日期和时间,用户接收一些通知。

例如:

  1. 19.13年9月9日收到message1
  2. 的通知
  3. 9月10日,07.30,消息2,
  4. 同一天,但是11.50,有消息3等等......
  5. 我使用了闹钟和推杆通知,但它仅适用于第一个。因此,我说这是因为我必须使用重复的报警管理器。

    在发布我的代码之前,我想澄清一些事情: 1)我在想它应该像那样工作: 我必须每1-2分钟检查一次,什么时间,从存储事件的数组中获取我的下一个“时间”,并为此设置一个警报,对吧?然后考虑到代码的这个代码将每1-​​2分钟运行一次,我将再次检查,获取下一个事件,设置该时间的警报等等。

    我说错了吗?

    首先,我试图实现一个重复的警报管理器,每1分钟会显示一个Toast消息(如果我这样做并用get_next_event()和set_next_notification()替换toast消息将完成工作我想想。 - 这个功能在我的项目中工作正常,只设置了一个警报。)

    但问题是,当我开始服务时,我什么都看不见。

    这是我的代码:

    Alarm.java

    public class Alarm extends BroadcastReceiver 
        {    
             @Override
             public void onReceive(Context context, Intent intent) 
             {   
                 Toast.makeText(context, "Starting Alarm Manager", Toast.LENGTH_LONG).show(); // For example
    
                 PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
                 PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
                 wl.acquire();
    
                 // Put here YOUR code.
                 Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example
    
                 wl.release();
             }
    
         public void SetAlarm(Context context)
         {
             Toast.makeText(context, "Setting Alarm Manager", Toast.LENGTH_LONG).show(); // For example
    
             AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
             Intent i = new Intent(context, Alarm.class);
             PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
             am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 , pi); // Millisec * Second * Minute
         }
    
         public void CancelAlarm(Context context)
         {
             Intent intent = new Intent(context, Alarm.class);
             PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
             AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
             alarmManager.cancel(sender);
         }
    

    YourService.java

    public class YourService extends Service
    {
        Alarm alarm = new Alarm();
        public void onCreate()
        {
            super.onCreate();    
            Toast.makeText(YourService.this, "Service Created", Toast.LENGTH_LONG).show(); // For example
    
        }
    
        public void onStart(Context context,Intent intent, int startId)
        {
            Toast.makeText(YourService.this, "Setting from Service", Toast.LENGTH_LONG).show(); // For example
    
            alarm.SetAlarm(context);
        }
    
        @Override
        public IBinder onBind(Intent intent) 
        {
            return null;
        }
    }
    

    DemoActivity.java

     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        buttonStart = (Button) findViewById(R.id.buttonStart);
        buttonStop = (Button) findViewById(R.id.buttonStop);
    
        buttonStart.setOnClickListener(this);
        buttonStop.setOnClickListener(this);
      }
    
      public void onClick(View src) {
        switch (src.getId()) {
        case R.id.buttonStart:
            Toast.makeText(ServicesDemo.this, "Button Pressed", Toast.LENGTH_LONG).show(); // For example
          Log.d(TAG, "onClick: starting srvice");
          startService(new Intent(this, YourService.class));
          break;
        case R.id.buttonStop:
          Log.d(TAG, "onClick: stopping srvice");
          stopService(new Intent(this, YourService.class));
          break;
        }
      }
    

    所以我按下按钮,我看到“按下按钮”,我看到“服务已创建”,但是没有显示警报开始的任何一个。当然,我每隔1分钟就看不到任何东西。

    这是我的清单。

    <application android:icon="@drawable/ic_launcher" android:label="@string/app_name">
    
        <activity android:name=".ServicesDemo" android:label="@string/app_name">
          <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
        </activity>
        <service android:enabled="true" android:name=".YourService" />
    <receiver  android:process=":remote" android:name="Alarm"></receiver>
    
      </application>
      <uses-sdk android:minSdkVersion="8" />
          <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
    
    </manifest> 
    

    那么我需要在代码或清单中更改什么?

1 个答案:

答案 0 :(得分:0)