我有两个类,分别是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
}
}
}
为了在我的广播接收器中执行此操作,我应该怎么做?
提前致谢。
答案 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调用以满足您的特定需求!