Android活动在闹钟管理器之后出现在前台



我有一个应用程序,它在报警管理器中生成事件,并在特定的时间被调用。代码如下所示

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();,因此它看起来就像在后台运行。

最新更新