2015-11-06 112 views
0

我一直在試圖慢慢學習過去一個月的Android API。我已閱讀文檔,查看示例,似乎無法弄清楚我做錯了什麼。基本上,應用程序啓動後,應用程序會準確設置鬧鐘1分鐘。AlarmManager廣播沒有收到

我現在遇到的問題是設置鬧鐘後,它沒有被收到。下面是我有:

SetAlarmActivity.java

public class SetAlarmActivity extends AppCompatActivity { 

    private final String TAG = "AlarmTest"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_set_alarm); 
     Calendar c = Calendar.getInstance(); 
     c.add(Calendar.MINUTE, 1); 
     Log.d(TAG, "Alarm time is " + c.getTime()); 

     // set the intent to launch our SetAlarmActivity 
     Intent alarmIntent = new Intent(SetAlarmActivity.this, SetAlarmActivity.class); 

     // retrieve a PendingIntent to perform a Broadcast 
     PendingIntent pendingAlarmIntent = PendingIntent.getBroadcast(SetAlarmActivity.this, 0, alarmIntent, 0); 

     // grab the Alarm Service and tell it to call our Intent at the set time 
     AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
      alarmManager.setExact(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingAlarmIntent); 
     }else{ 
      alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingAlarmIntent); 
     } 
    } 
} 

AlarmReceiver.java

public class AlarmReceiver extends WakefulBroadcastReceiver { 
    private final String TAG = "AlarmTest"; 

    @Override 
    public void onReceive(Context context, Intent intent){ 
     Log.d(TAG, "Received broadcast!"); 
    } 
} 

AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="bz.bdu.alarmtest" > 

    <uses-permission android:name="android.permission.WAKE_LOCK" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme" > 
     <activity android:name=".SetAlarmActivity" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <receiver android:name=".AlarmReceiver" /> 
    </application> 

</manifest> 

回答

1

您必須創建當前activityreceiver類之間的意圖。像這樣改變你的代碼。

Intent intent = new Intent(SetAlarmActivity.this, AlarmReceiver.class); 
+1

這工作,謝謝!出於某種原因,我誤解了本案中意圖的目的。它非常有意義。 –

0

變化

意圖alarmIntent =新意圖(SetAlarmActivity.this, SetAlarmActivity.class);

意圖alarmIntent =新意圖(SetAlarmActivity.this, AlarmReceiver.class);

那麼它的優良工程