我想在发生特定事件时打开一个屏幕,不管我现在在哪里,我该怎么做?
Intent Iatualizar = new Intent(this, Atualizar.class);
startActivity(Iatualizar);
如果我在屏幕上打开程序,上面的代码有效,但在屏幕在后台时无效。如何让它发挥作用?谢谢你
我想在发生特定事件时打开一个屏幕,不管我现在在哪里,我该怎么做?
Intent Iatualizar = new Intent(this, Atualizar.class);
startActivity(Iatualizar);
如果我在屏幕上打开程序,上面的代码有效,但在屏幕在后台时无效。如何让它发挥作用?谢谢你
您应该只创建一个在事件发生时加载您的活动的服务。
为此,您可以在加载应用程序时启动服务,并将事件接收器放在服务类中。这样,即使其他应用程序正在运行并且您的应用程序不在前台(显示在屏幕上),您仍然可以触发事件。
如果您的活动不在前台并且您开始资源不足,Android 垃圾收集将尝试终止您的活动。
如果您想更进一步,使服务成为前台服务,那么理论上它将是 Android 在内存不足时将杀死的最后一件事。如果您需要代码示例,请告诉我。
希望这可以帮助你!干杯
- 编辑 -
这是一个帮助您入门的代码示例。
在您的活动中 onCreate 调用一些类似于您上面的代码来启动您的服务。IE:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent IatualizarService = new Intent(this, AtualizarService.class);
startService(Iatualizar);
}
如果你愿意,你也可以在你的 onResume 中包含它,(或者从一个按钮启动它,或者你希望这个服务启动)。
然后像这样创建一个服务类:
public class AtualizarService extends Service {
private final IBinder mBinder = new MyBinder();
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public void onCreate() {
// In here you can make your service a foreground service to help prevent garbage collection from occurring.
makeforeground();
}
private boolean makeforeground() {
String msg = "Turning on foreground service";
ErrorLog.i(getApplicationContext(), TAG, msg);
try {
Notification notification = new Notification(
R.drawable.ic_dialog_info,
getText(R.string.notification_text),
System.currentTimeMillis());
notification.flags |= Notification.FLAG_AUTO_CANCEL;
Intent activityIntent = new Intent(this, YourMainActivity.class);
activityIntent.setAction(Intent.ACTION_MAIN);
activityIntent.addCategory(Intent.CATEGORY_LAUNCHER);
activityIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
activityIntent, 0);
notification.setLatestEventInfo(this,
getText(R.string.notification_title),
getText(R.string.notification_text), pendingIntent);
startForeground(1234567890, notification); // random id
return true;
} catch (Exception e) {
String error = "displayNotification Error Message: "
+ e.getMessage() + " Cause: " + e.getCause();
ErrorLog.e(GlobalParameters.getContext(),
TAG + " Notification Foreground Service", error);
return false;
}
}
@Override
public void onDestroy() {
}
@Override
public IBinder onBind(Intent arg0) {
return mBinder;
}
public class MyBinder extends Binder {
AtualizarService getService() {
return AtualizarService .this;
}
}
}
然后在这个服务类中,你可以添加一个广播接收器,它可以触发你想要的任何事件。然后根据需要加载您的活动。
干杯
将FLAG_ACTIVITY_NEW_TASK添加到您的 Intent 中。如果您检查日志猫,它也会告诉您这一点。
试试这个,你也可以使用下面的代码启动一个服务
Intent Iatualizar = new Intent(this, Atualizar.class);
Iatualizar.addFlags(FLAG_ACTIVITY_NEW_TASK);
startActivity(Iatualizar);