Android的活动涉及到前台经理报警后,(android activity comes to fo

2019-10-30 20:15发布

我的应用程序,这使得事件报警经理,并在特定的时间其调用。 代码如下所示

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);

意向调用此活动。

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)

一切对我的作品,除了一两件事。 每当警报管理器调用我的活动 - 应用程序来前景。 当它应该只在后台更改振铃模式,并在状态栏添加通知。

不允许应用程序来前台什么办法?

Answer 1:

你应该做这一切的广播接收器 。 没有用户界面,并有一个Context到接收器的传递的变量onReceive()方法,它允许你基本上做什么活动呢,不具有实际的用户界面。 这意味着,你可以设置的铃声,显示状态栏通知,等你的广播接收器类应该是这个样子:

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>


Answer 2:

该行添加到Activity中您AndroidManifest

android:theme="@android:style/Theme.NoDisplay"

和你有什么可显示一个活动。 既然你已经调用finish(); 在你的代码,它看起来像它在后台运行。



文章来源: android activity comes to foreground after alarm manager