从BroadcastReceiver或Service Class启动新活动

时间:2011-10-06 07:25:37

标签: android

你好必须从BroascastReceiver或服务启动一个新的Activity,但是我发现错误是在没有活动上下文的情况下无法启动活动。

我使用以下代码

Intent i=new Intent(this,MyActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);

还包括Mainifest文件中的活动,

请解决,

另一个问题是,我在BroadcastReceiver内部启动了一个服务,但是当BroadcastReceiver生命周期完成时,此服务完成。我想活着的Serive

请帮我解决这个问题

3 个答案:

答案 0 :(得分:2)

使用context代替this,如下所示:

Intent i=new Intent(context,MyActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);

manifest文件中注册您的服务,然后使用startservice

答案 1 :(得分:2)

虽然我无法解决你的第一个问题,但我会回答第二个问题。

@Override
public void onReceive(Context context, Intent intent) {
    Intent intent = new Intent(context, SampleService.class);
    context.getApplicationContext().startService(intent);       
}

此外,Android SDK开发人员don't recommend可以从广播接收者或服务开始活动。

答案 2 :(得分:0)

此代码对我来说很好

public void onReceive(Context context, Intent intent) {
    Log.v(Tag, "Start Listening Phone Call");
    TelephonyManager tm = (TelephonyManager) context
            .getSystemService(Context.TELEPHONY_SERVICE);

    switch (tm.getCallState()) {
    case TelephonyManager.CALL_STATE_IDLE:
        Log.v(Tag, "No call");
        break;
    case TelephonyManager.CALL_STATE_RINGING:
        Log.v(Tag, "A new call arrived and is ringing or waiting");
        Intent i = new Intent(context,MyActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
        break;
    }