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

ユーザーが最小化されたアプリから選択できるように、電話の再起動後にアプリをバックグラウンドで実行する必要があります

あなたのアプローチは間違っていると思います。今やろうとしているのは、アプリのアイコンを最近のアプリ リストに追加することだけです。あなたのアプリはバックグラウンドで実行されません。あなたは本当にそれを望んでいないと思います. 私は正しいですか?

アンドロイドによって管理されている最近のアプリリストと、アプリを最近のアプリリストに強制的に入れることはあまり良い考えではありません。ユーザーは、デスクトップのランチャーまたはアイコンから必要なときにアプリを起動します。

于 2013-01-28T12:01:45.113 に答える
1

ブロードキャスト レシーバーが正常に動作し、アプリが正常に起動している場合は、MyHomeViewアクティビティの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 に答える