8

アプリケーションロッカーとして使用されるアプリケーションを開発しています。これは、インストールされている他のアプリを開くときにユーザーにパスワードを要求することでそれらを保護できるアプリです。私のアプリはここにあります

問題は、アプリケーションが Android タスク マネージャーから強制的に閉じることで簡単にスキップできることです。どうすればこれを克服できますか?

また、新しいアプリケーションが開いていることを確認する、タスクの上にあるアプリを 1 秒ごとにチェックするサービスを作成する、またはチェックを行うためにアラーム マネージャーで毎秒アラームを発生させる最良の方法は何ですか。

4

3 に答える 3

4

更新しました :

Restart service after force stop

回答 :申し訳ありませんが、ユーザーがアプリケーションを手動で起動するまで再起動できません。

サービスがプロセスの一部として実行されていると仮定し、ユーザーがプロセスを強制停止した場合、ユーザーが手動で起動するまでサービスを再度実行することはできません.これは特に3.0 以降のバージョンで有効です (あなたのものを確認してください)。また、常にサービスを開始し続け、何らかの形でユーザーを悩ませているアプリがあると考えると、それは論理的に思えます。そのため、ユーザーがアプリでヒット (:) 強制停止) を注文した場合、サービスを再起動してユーザーに迷惑をかけ続けるべきではありません。

たとえば、wake lock を保持することでプロセッサー時間を食い尽くすだけのアプリを作成でき、それらを強制終了できないとしたらどうなるか想像してみてください。これは恐ろしく、巨大なセキュリティ災害になるでしょう。

そのため、ユーザーがいずれかのアクティビティを開始するまで、サービスを再開することはできません。

また、AFAIKの強制停止ボタンを無効にすることはできません。アプリと (限られた範囲で) アクセスが許可されているリソース以外に、デバイス上で制御できるものは何もないという観点を取る必要があります。

最後に、強制停止したい場合は、gtalk アプリでさえあなたの意志に屈します。Gtalk または PUSH Gmail などの gtalk サービスを使用する他のアプリを使用する場合にのみ開始されます (gtalk がファームウェアの一部ではない電話用)。

参照リンク

解決 :

https://stackoverflow.com/a/11238779/1218762

于 2013-06-10T11:39:47.180 に答える
-1

独自の例外ハンドラーを作成し、アプリがクラッシュするたびにサービスを開始します..

例外ハンドラ クラス

*public class MyHandler implements UncaughtExceptionHandler {
    private Context m_context;


    public static void attach(Context context) {
        Thread.setDefaultUncaughtExceptionHandler(
            new MyHandler(context)
        );
    }

    ///////////////////////////////////////////// implementation

    private MyHandler(Context context) {
        m_context=context;
    }

    public void uncaughtException(Thread thread,Throwable exception) {
    /*  StringWriter stackTrace=new StringWriter();
        exception.printStackTrace(new PrintWriter(stackTrace));*/
        System.out.println("ERROR IS "+(exception));


        Intent intent=new Intent("com.sample.service.serviceClass");  
            m_context.startService(intent);

        // from RuntimeInit.crash()
        Process.killProcess(Process.myPid());
        System.exit(10);
    }
}*

アクティビティに添付

public class MyActivity extends Activity{
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.grid_layout);
        MyHandler.attach(this);
}
}
于 2013-06-10T11:55:30.287 に答える