0

在手机重启/开机后,我需要我的 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" />

但是在里面没有用。谁能帮帮我吗?

谢谢。

4

3 回答 3

2

我需要我的应用程序在手机重启后在后台运行,以便用户可以从最小化的应用程序中进行选择

我认为你的方法是错误的。您现在要做的就是将您的应用程序图标添加到最近的应用程序列表中。您的应用程序不会在后台运行,我认为您并不真正想要它。我对吗?

由 android 管理的最近应用程序列表和恕我直言,强制您的应用程序出现在最近的应用程序列表中并不是一个好主意。用户将在需要时从桌面上的启动器或图标启动您的应用程序。

于 2013-01-28T12:01:45.113 回答
1

如果您的广播接收器工作正常并且应用程序成功启动,那么您可以在MyHomeViewActivity 的onCreate方法中使用以下代码转到主屏幕。

诀窍是在应用程序启动时以编程方式单击 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

建议将您的代码更改为服务以在后台运行它。

于 2013-01-28T10:34:41.837 回答
0

列奥尼多斯回答的建议是正确的。

但是,这只是一个解决方法:

在我的 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);
}

谢谢

于 2013-01-28T12:42:14.010 回答