我有应用程序,它在警报管理器中生成事件,并在特定时间调用它。 代码看起来像这样
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)
除了一件事,一切都适合我。每当警报管理器调用我的活动时 - 应用程序就会出现在前台。 当它只应在后台更改铃声模式时,在状态栏中添加通知。
任何不允许应用程序出现的方法?
答案 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();
,因此它看起来像是在后台运行。