3

我有两个类,它们是 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

        }
    }
}

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

4

3 回答 3

2

在 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
}
于 2013-06-12T06:03:01.393 回答
2

尝试使用FLAG_ACTIVITY_REORDER_TO_FRONTFLAG_ACTIVITY_SINGLE_TOP

于 2013-06-11T15:04:47.950 回答
0

在您的 onReceive 方法中执行此操作:

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

您可能需要根据您的特定需求调整 addFlags 调用!

于 2013-06-11T16:15:52.010 回答