我有一个应用程序,它在报警管理器中生成事件,并在特定的时间被调用。代码如下所示
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();
}
}
在无聊的东西有代码应该在后台运行(change ringermode)
除了一件事,我什么都可以。每当闹钟管理器调用我的活动时,应用程序就会出现在前台。当它只应该在后台改变振铃模式,并在状态栏添加通知。
有没有办法不允许应用程序进入前台?
您应该在BroadCastReceiver中完成所有这些操作。没有UI,有一个Context
变量传递给接收者的onReceive()
方法,它允许你基本上做任何活动做,没有一个实际的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>
将这一行添加到您的AndroidManifest
Activity
中android:theme="@android:style/Theme.NoDisplay"
,你有一个没有显示的活动。由于您已经在代码中调用了finish();
,因此它看起来就像在后台运行。