首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓活动在告警管理器后前台

安卓活动在告警管理器后前台
EN

Stack Overflow用户
提问于 2012-12-22 03:54:30
回答 2查看 1.9K关注 0票数 0

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

代码语言:javascript
复制
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调用此活动。

代码语言:javascript
复制
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中,有一些代码应该在后台运行(更改振铃器模式)

除了一件事之外,一切对我都是有效的。每当警报管理器调用我的活动时,应用程序都会转到前台。当它只需要在后台更改振铃器模式,并在状态栏中添加通知时。

有什么办法不允许应用程序出现在前台吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-22 04:29:46

您应该在BroadCastReceiver中完成所有这些操作。这里没有UI,并且有一个传递给接收器的onReceive()方法的Context变量,它允许您基本上执行活动所做的任何事情,而不需要实际的UI。这意味着您可以设置振铃器、显示状态栏通知等。您的BroadcastReceiver类应该如下所示:

代码语言:javascript
复制
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代码应该如下所示:

代码语言:javascript
复制
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);

您的清单应包含以下内容:

代码语言:javascript
复制
 <receiver android:name=".AlarmBroadcastReceiver" >
        </receiver>
票数 2
EN

Stack Overflow用户

发布于 2012-12-22 04:37:55

将此行添加到AndroidManifest中的Activity

代码语言:javascript
复制
android:theme="@android:style/Theme.NoDisplay"

并且您有一个没有任何内容可显示的活动。由于您已经在代码中调用了finish();,因此它看起来像是在后台运行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13996366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档