从服务调用活动

时间:2012-06-24 00:20:00

标签: android service android-intent

我有一个包含服务方法的警报服务的服务类。激活警报服务时会调用这些方法。我想要做的是在服务类中调用这些方法之一(当警报响起时)调用另一个类的意图。它只是在调用intent时标记错误。这仅发生在激活警报服务时调用的方法(服务类中的方法)。这是因为课程extends Service而不是extends Activity?我不确定,还有什么想法?

(以下是我的服务类,当应用程序强制关闭的onStart方法调用另一个活动的意图时。)

public class MyAlarmService extends Service {
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        Toast.makeText(this, "MyAlarmService.onCreate()", Toast.LENGTH_LONG).show();
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        Toast.makeText(this, "MyAlarmService.onBind()", Toast.LENGTH_LONG).show();
        return null;
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        Toast.makeText(this, "MyAlarmService.onDestroy()", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onStart(Intent intent, int startId) {
        // TODO Auto-generated method stub
        super.onStart(intent, startId);

        Toast.makeText(this, "MyAlarmService.onStart()", Toast.LENGTH_LONG).show();

        //////////////////////////////////////////////////////////////////////////////////

        Intent i = new Intent("com.exercise.AndroidAlarmService.HELLO"); 
        startActivity(i); 

        The intent that is send to open another class, an activity.
        **

        /////////////////////////////////////////////////////////////////////////////////
    }

    @Override
    public boolean onUnbind(Intent intent) {
        // TODO Auto-generated method stub
        Toast.makeText(this, "MyAlarmService.onUnbind()", Toast.LENGTH_LONG).show();
        return super.onUnbind(intent);
    }
}

LogCat上的其中一个错误是:

  

06-24 01:11:36.857:E / AndroidRuntime(10805):java.lang.RuntimeException:无法使用Intent {flg = 0x4 cmp = com.exercise启动服务com.exercise.AndroidAlarmService.MyAlarmService@412f23f8。 AndroidAlarmService / .MyAlarmService(有附加内容)}:android.util.AndroidRuntimeException:从Activity上下文外部调用startActivity()需要FLAG_ACTIVITY_NEW_TASK标志。这真的是你想要的吗?

3 个答案:

答案 0 :(得分:2)

您是否尝试过错误日志建议的内容?

i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

答案 1 :(得分:0)

您可以使用服务的onStart()来呼叫活动.....

@Override 
public void onStart(Intent intent, int startId)  { 
    ...
    Log.i("Service", "onStart() is called"); 
    Intent callIntent = new Intent(Intent.ACTION_CALL); 
    callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    callIntent.setClass(<Set your package name and class name here>);
    startActivity(callIntent);
    ...

}

答案 2 :(得分:0)

您可以按照其他人的建议启用该标记。默认情况下阻止它的原因是因为服务很容易在后台由系统自动重启。如果您在onStart服务期间启动活动,则无论用户执行什么操作,此活动都会启动。这将是糟糕的用户体验。请记住这个警告,并为这种情况解决。