我正在编写前台服务来接收GPS通知,发送系统通知和拨打电话。应用程序没有附加Activity
,只有从引导接收器启动的服务。当我试图从服务的onLocationChanged()内部启动调用活动时,我得到了:
从Activity上下文外部调用startActivity()需要 FLAG_ACTIVITY_NEW_TASK标志。这真的是你想要的吗?
由于担心持怀疑态度的问题,我决定查看stackOverFlow,我发现了这些: Calling startActivity() from outside of an Activity context,Android: Make phone call from service,android start activity from service - 所有人都建议这样做。
所以,我的问题是:为什么不建议使用这个标志(关于历史堆栈的东西)?在我的情况下可以这样做吗?
简化代码:
public class CallService extends Service implements LocationListener {
@Override
public void onCreate() {
super.onCreate();
startForeground(1, NotificationGenerator.getNotification());
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public synchronized void onLocationChanged(Location loc) {
String url = "tel:xxxxxxxxxx";
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(url));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
...
}
答案 0 :(得分:2)
答案完全在于用户体验( UX )域。 Android设备通常是个人设备,您应该在编写应用时考虑到这一点。
用户可能正在玩游戏或拨打电话,在没有任何通知的情况下启动您的活动是很粗鲁的,我会卸载任何会这样做的应用。
此外,如果手机被锁定,您的活动将无法实际启动,而是会等到用户解锁手机。
另一方面,通知是告诉用户应用程序想要向您显示某些内容。所以请改用它们。
除非您正在构建私有应用程序,否则您知道什么更符合您的要求。