按下电源按钮后开始我的活动

时间:2014-05-29 10:36:15

标签: android android-activity broadcastreceiver

我正在尝试开发一个应用程序,当用户按下电源按钮时启动手电筒。

在那个过程中,我通过捕获Intent.ACTION_SCREEN_OFF和Intent.ACTION_SCREEN_ON意图来了解如何监听电源按钮。

现在我正在尝试在收到这些意图后开始我的活动。

我在接收器中使用此代码来捕获意图

public class IReciever extends BroadcastReceiver{
    private Activity acti = null;
    public IReciever(Activity act) {
    acti = act;
    }
@Override
public void onReceive(Context ctxt, Intent intent) {
    if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)){
        Intent i = new Intent(acti, MainActivity.class);
        acti.startActivity(i);
        Toast.makeText(ctxt, "MAIN ACTIVITY IS BEING CALLED ", Toast.LENGTH_SHORT).show();
        Log.e("In on receive", "In Method:  ACTION_SCREEN_ON");
    }
    }
}

以下是我的MainActivity的代码

public class MainActivity extends Activity {

private Camera camera;
private boolean isFlashOn;
private boolean hasFlash;
Parameters params;  

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    IReciever mReceiver = new IReciever(this);
    registerReceiver(mReceiver, filter);
}
}

该应用程序显示祝酒词,我能够看到确认我能够接收意图的日志。

但我没有启动我的MainActivity。请帮帮我

1 个答案:

答案 0 :(得分:2)

在不在活动中的清单中注册您的接收者。

并使用以下代码开始您的活动

Intent in = new Intent(context, MainActivity.class);

in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
in.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
in.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
in.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.startActivity(in);

将此代码写入onreceiver ..您检查电源开关的位置。