我有一个包含服务方法的警报服务的服务类。激活警报服务时会调用这些方法。我想要做的是在服务类中调用这些方法之一(当警报响起时)调用另一个类的意图。它只是在调用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标志。这真的是你想要的吗?
答案 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服务期间启动活动,则无论用户执行什么操作,此活动都会启动。这将是糟糕的用户体验。请记住这个警告,并为这种情况解决。