0

我有一个包含服务方法的警报服务的服务类。这些方法在警报服务被激活时被调用。我想要做的是在服务类中调用的这些方法之一中调用另一个类的意图(当警报响起时)。它所做的只是在调用意图时标记错误。这只发生在激活警报服务时调用的方法中(服务类中的方法)。这是因为类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.AndroidAlarmService/ 启动服务 com.exercise.AndroidAlarmService.MyAlarmService@412f23f8。 MyAlarmService(有附加功能)}:android.util.AndroidRuntimeException:从 Activity 上下文外部调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志。这真的是你想要的吗?

4

3 回答 3

2

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

i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
于 2012-06-24T00:36:06.367 回答
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);
    ...

}
于 2012-06-24T01:24:56.817 回答
0

您可以通过启用其他人建议的标志来做到这一点。默认情况下阻止它的原因是因为服务很容易在后台被系统自动重启。如果您在服务的 onStart 期间启动活动,则无论用户可能在做什么,此活动都会启动。这将是糟糕的用户体验。请牢记这一警告,并针对这种情况进行解决。

于 2013-05-04T05:32:05.690 回答