0

(xmlで定義されたチェックボックス設定に基づいて)起動時に条件付きで開始されるサービスを持つアプリケーションがあります。私の放送受信機クラスはこれです:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;

public class BootServiceReceiver extends BroadcastReceiver {
private static final String TAG = "tweakmanager";

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
        SharedPreferences prefLights;
        prefLights = PreferenceManager.getDefaultSharedPreferences(context);
        if (prefLights.getBoolean("checkbox1", false)) {
            Log.i(TAG, "doing nothing...");
        } else {
            Intent p = new Intent();
            p.setAction("app.tweaks.Service");
            context.startService(p);
        }
    }
}
}

チェックボックスがオフになっている場合にのみサービスを開始する必要があることに注意してください。デフォルトの状態がチェックされます。

これで、通常の操作では、すべてが正常に機能しています。チェックボックスがオンの場合、サービスは開始されません。チェックボックスがオフの場合、サービスは起動時に開始されます。

問題は、アプリケーションがインストールされているのに実行されない場合にあります...この場合、チェックボックスがオンになっている場合でも、サービスは次回の起動時に開始されます。受信者が読み取れるファイルにデフォルトの設定を書き込むことを考えましたが、それが最も良い解決策ではないと思います...

4

1 に答える 1

2

この場合、チェックボックスがチェックされていても、サービスは次回の起動時に開始されます

優先順位がないため、そうしないでください。指定したgetBoolean()とおりに戻る必要がありfalseます。

そうは言っても、より良い解決策があります。

  1. この要素android:enabled="false"のマニフェストに追加します。<receiver>

  2. 設定でチェックボックスを切り替える場合は、とを使用PackageManagersetComponentEnabledSetting()てを有効または無効にしBroadcastReceiver、チェックボックスがオンになっているときに有効になるようにします。

このように、ユーザーがこのチェックボックスをオンにしていない場合、Androidは再起動時にプロセスをわざわざフォークする必要はありません。

于 2012-07-14T10:43:53.857 に答える