2015-11-06 114 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);

那么它的优良工程