警报管理器后,android活动进入前台

时间:2012-12-21 19:54:30

标签: android android-activity alarmmanager foreground

我有应用程序,它在警报管理器中生成事件,并在特定时间调用它。 代码看起来像这样

Intent intent = new Intent(this, AlarmActivity.class);
pendingIntent = PendingIntent.getActivity(this,req_code, intent, PendingIntent.FLAG_CANCEL_CURRENT);    
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),AlarmManager.INTERVAL_DAY*7,
                    pendingIntent);

Intent会调用此活动。

public class AlarmActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    public void onStart(){
        super.onStart();
        //Change ringer mode
        //Add notification in status bar
        //Other booring stuff here...
        Toast.makeText(this,"Finishing",2000).show();
        finish();
    }
}

在booring stuffthere中是应该在后台运行的代码(更改ringermode)

除了一件事,一切都适合我。每当警报管理器调用我的活动时 - 应用程序就会出现在前台。 当它只应在后台更改铃声模式时,在状态栏中添加通知。

任何不允许应用程序出现的方法?

2 个答案:

答案 0 :(得分:1)

你应该在BroadCastReceiver中完成所有这些工作。没有UI,并且有一个Context变量传递给Receiver的onReceive()方法,它允许您基本上执行Activity所做的任何操作,而无需实际的UI。这意味着您可以设置振铃器,显示状态栏通知等。 您的BroadcastReceiver类应该类似于:

public class AlarmBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    //Change ringer mode
    //Add notification in status bar
    //Other boring stuff here...
    Toast.makeText(context,"Finishing",2000).show();
    }
}

请注意,对于Toast,使用名为context的变量。

您的AlarmManager代码应如下所示:

Intent intent = new Intent(this, AlarmBroadcastReceiver.class);
pendingIntent = PendingIntent.getBroadcast(this,req_code, intent, PendingIntent.FLAG_CANCEL_CURRENT);    
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),AlarmManager.INTERVAL_DAY*7,
                    pendingIntent);

你的清单应该有这个:

 <receiver android:name=".AlarmBroadcastReceiver" >
        </receiver>

答案 1 :(得分:1)

将此行添加到Activity

中的AndroidManifest
android:theme="@android:style/Theme.NoDisplay"

你有一个没有要显示的活动。由于您已在代码中调用finish();,因此它看起来像是在后台运行。