如何通过广播接收器将应用程序从后台带到前台

时间:2013-06-11 14:50:19

标签: android broadcastreceiver intentfilter powermanager

我有两个类,分别是MainActivity和MyBroadcastReceiver。 BroadcastReceiver检测手机屏幕是打开还是关闭。我希望每当屏幕锁定被释放时启动我的应用程序。我的意思是,当手机锁定发布时,我想将我的应用程序带到前面。

这是我的活动课程:

 public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        registerReceiver();
    }

    private void registerReceiver(){
        IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        BroadcastReceiver mReceiver = new MyPhoneReceiver();
        registerReceiver(mReceiver, filter);
    }
}

这是我的广播接收器:

public class MyPhoneReceiver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);

    if(pm.isScreenOn()){
        //Bring application front

    }
}

}

为了在我的广播接收器中执行此操作,我应该怎么做?

提前致谢。

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

在BroadcastReceiver的onReceive方法中执行以下操作

@Override
public void onReceive(Context context, Intent intent) {
    Intent newIntent = new Intent();
    newIntent.setClassName("com.your.package", "com.your.package.MainActivity");
    newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    context.startActivity(newIntent);
}

您需要标记“FLAG_ACTIVITY_NEW_TASK”,否则会抛出致命异常。

标记“FLAG_ACTIVITY_SINGLE_TOP”是将MainActivity置于最前面,您可以通过覆盖MainActivity中的onNewIntent方法继续执行任何操作。

@Override
protected void onNewIntent(Intent intent) {
    // continue with your work here
}

答案 2 :(得分:0)

在onReceive方法中执行此操作:

Intent activityIntent = new Intent(this, MainActivity.class);
activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(activityIntent);

您可能需要调整addFlags调用以满足您的特定需求!