2016-04-03 67 views
0

我想了解android中AlarmManager的功能。 我试图在每10秒钟后调用闹钟。但问题是,我得到一个空白的屏幕。然后我发现,我试图打电话在警报唤醒的意图没有被调用。请有人帮助我和这个?闹钟没有在android中调用

MainActivity.java

public class MainActivity extends AppCompatActivity { 
    private AlarmManager alarmMgr; 
    private PendingIntent alarmIntent; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(this, AlarmReceiver.class); 
     alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 
     Log.d("asd","initialized alarmintent"); 
     alarmMgr.set(AlarmManager.ELAPSED_REALTIME, 
       SystemClock.elapsedRealtime()+10*1000, alarmIntent); 

         Log.d("asd", "alarm set"); 
    } 
} 

AlarmReceiver.java

public class AlarmReceiver extends AppCompatActivity 
{ 
    TextView tv; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.intent_layout); 
     Log.d("asd","writing textview"); 
     tv=(TextView)findViewById(R.id.textview); 
     tv.setText("called"); 
    } 

}

回答

1

要调用的PendingIntent错误:

Intent intent = new Intent(this, AlarmReceiver.class); 
alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 

见你是如何调用待定意图。 getBroadcast(此,0,意向,0)

这是错误的,因为你的AlarmReceiver是一种活动(不是一个BroadcastReceiver像你说的是未决的目的是)。尝试调用它像这样:

alarmIntent = PendingIntent.getActivity(this, 0, intent, 0); 

这仅仅是错误地使用挂起的意图那是你的问题:)

下面是文档:

http://developer.android.com/reference/android/app/PendingIntent.html

编辑:该文件还说:

请注意,该活动将在现有活动的上下文之外启动,因此您必须在Intent中使用Intent.FLAG_ACTIVITY_NEW_TASK启动标志。

所以请确保你也这样做。

+0

,我想通过“Intent.FLAG_ACTIVITY_NEW_TASK”作为getActivity方法的最后一个参数,但它给错误。为什么? – a874

+0

try:intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); –