手机重启/开机后,我需要我的Android应用程序处于后台模式。
目前我正在使用以下代码,以便在手机重启/开机后我的应用成功启动。
的AndroidManifest.xml:
<receiver android:enabled="true" android:name="my_package.BootUpReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
BootUpReceiver.java:
public class BootUpReceiver extends BroadcastReceiver
{
private static SharedPreferences aSharedSettings;
@Override
public void onReceive(Context context, Intent intent)
{
aSharedSettings = context.getSharedPreferences("MyPreferences", Context.MODE_PRIVATE);
boolean isUserLoggedIn = aSharedSettings.getBoolean(Key.AUTHENTICATED, false);
if(isUserLoggedIn)
{
Intent aServiceIntent = new Intent(context, MyHomeView.class);
aServiceIntent.addCategory(Intent.CATEGORY_HOME);
aServiceIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(aServiceIntent);
}
}
}
如上所述,我的应用程序在手机重启/开机后成功启动。
但是,手机重启/开机后,我的应用程序处于前台模式。但我需要我的应用程序处于后台模式。
任何人都可以说,如何在手机重启或开机后让应用处于后台模式。
我甚至试过将意图类别更改为
<category android:name="android.intent.category.HOME" />
但没有用。有人可以帮帮我吗?
感谢。
答案 0 :(得分:2)
手机重启后我需要我的应用才能在后台运行,以便用户可以从最小化的应用中进行选择
我认为你的做法是错误的。您现在要做的就是将应用的图标添加到最近的应用列表中。你的应用程序不会在后台运行,我认为你真的不想要它。我是对的吗?
由Android和IMHO管理的最新应用列表强制您的应用程序位于最近的应用列表中并不是一个好主意。当用户需要桌面上的启动器或图标时,用户将启动应用程序。
答案 1 :(得分:1)
如果您的广播接收器工作正常并且应用程序成功启动,那么您可以使用MyHomeView
活动的onCreate
方法中的以下代码转到主屏幕。
当应用程序启动时,Trick是以编程方式单击HOME按钮。
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
你可以从BroadcastReceiver传递一些变量来区分普通请求和BroadcastReceiver的请求,使上述代码成为条件。
但是如果你想在后台执行它,那么最好使用Service。
建议您将代码更改为服务,以便在后台运行。
答案 2 :(得分:0)
Leonidos回答的建议是正确的。
然而,只是一个解决方法:
在我的BootUpReceiver中,我有一个单独的布尔标志! (这是一个糟糕的方式。但只是一种解决方法)
SharedPreferences.Editor aPrefEditor = aSharedSettings.edit();
aPrefEditor.putBoolean(Key.IS_DEVICE_RESTARTED, true);
aPrefEditor.commit();
在MyHomeView的Oncreate方法中:
boolean isDeviceRestarted = aSharedSettings.getBoolean(Key.IS_DEVICE_RESTARTED, false);
if(isDeviceRestarted)
{
SharedPreferences.Editor aPrefEditor = aSharedSettings.edit();
aPrefEditor.putBoolean(MamaBearKey.IS_DEVICE_RESTARTED, false);
aPrefEditor.commit();
moveTaskToBack(true);
}
由于