2

Android 用の GPS ベースのアプリケーションを作成しています。GPS をオフにするアプリケーションを終了するボタンが必要ですが、戻る矢印やホームでプロセスをオフにしたくありません。

私はこのスレッドや、やりたいことをやりたくない理由を説明する素晴らしい仕事をしている他の多くのスレッドを読み ました。問題は、バックグラウンド プロセスがあり、アプリケーションから矢印を戻すだけで GPS が実行されたままになることです。OnStop() または OnPause() でこれらをオフにできることは理解していますが、戻る矢印またはホームで何かを停止させたくありません。ユーザーがメイン画面で EXIT を押して終了を確認し、クリーンアップを行う別の画面に移動しない限り、ユーザーが何をしても、すべての GPS とハンドラーを実行し続ける必要があります。そうすれば、ユーザーは、誤ってヒットした場合に実際に終了することなく、終了画面から矢印を戻すことができます。

このアプリケーションは、グローブを着用した悪条件の明るい日光の下で使用されることをご理解ください。何かを読むのは非常に難しいので、高さ 100 のハイ コントラスト フォントを使用しています。ユーザーが本当に停止したくない限り、停止することはできません。しかし、放置しているだけでバッテリーが死んでしまいます。バッテリーが切れるという考えだけで、システムの動作に問題はありません。偶然かもしれませんが、単純なボタンを押してサービスを停止させたくありません。このアプリのバックグラウンド プロセスを強制終了するのは、電話の電源を切るのと同じくらい難しいことですが、できるようにしたいのです。

私は、最後の 3 時間のグーグルで見た、単なる戻る矢印である finish() と他のすべてのメソッドを試しました。EXIT ボタンを GPS をオフにするボタンに変更することを考えましたが、ユーザーが戻る矢印を使用して終了すると、メイン ページに戻り、GPS がオンに戻ります。

ただ明確にします。私のアプリにはメニューベースのメイン画面があります。戻る矢印をクリックすると、有用なページはそのメニューに戻ります。メニュー項目の 1 つが EXIT です。そのメニュー項目を押すと、EXIT というボタンのある終了画面に移動します。ユーザーが偶然ここに来た場合は、戻る矢印でメニューに戻ることができます。彼が終了ページの [終了] ボタンをクリックすると、すべてのハンドラーと GPS をオフにして、電話またはタブレットのホーム画面に移動できます。少なくともそれが私が望んでいることであり、どうすればよいかわかりません。

OnStop() または OnPause() を使用して GPS をオフにする同様のアプリを使用しましたが、面倒です。それは私が望むものではありません。それが私がやりたいことだと言わないでください。私はそれを行う方法を知っています。それは私が求めていることではありません。

ありがとう。

アップデート:

クリスのおかげで、私はこれをほとんど解決しました。EXIT ボタンでハンドラーと GPS をオフにしてから、このコードを実行できます。

     Intent startMain = new Intent(Intent.ACTION_MAIN);
     startMain.addCategory(Intent.CATEGORY_HOME);
     startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     startActivity(startMain);

更新 #2 さらなるテストで見つけた問題は、アプリケーションが 2 回目に呼び出されたときに、アプリケーションが EXIT 画面に戻ることです。

更新#3 追加finish(); startActivity(startMain) が機能しているようです。仕上げはメインメニューへ戻る矢印です。うまくいけば、すべてのコードをインストールしたら、引き続き機能します。上記の 3 行目を削除したので、次のようになりました。

     Intent startMain = new Intent(Intent.ACTION_MAIN);
     startMain.addCategory(Intent.CATEGORY_HOME);
     startActivity(startMain);
     finish();
4

2 に答える 2

1

これを解決する本当に簡単な方法があります。主な問題は、ユーザーが終了したい場合に、EXIT アクティビティが MAIN アクティビティに戻らないようにする必要があることです (つまり、ユーザー EXITS の後、アクティビティ スタックは空でなければなりません)。

を使用して、MAIN アクティビティから EXIT アクティビティを呼び出しますstartActivityForResult()。EXIT アクティビティはRESULT_OK、ユーザーが本当に終了したい場合に戻ることができRESULT_CANCELED、ユーザーが [戻る] ボタンを使用して戻る場合に戻ります。

MAIN アクティビティは結果を取得し、ユーザーが本当に終了したい場合はonActivityResult()呼び出すことができ、ユーザーが終了をキャンセルした場合は何もしません。finish()

これにより、ユーザーが終了したい場合にアクティビティ スタックが完全にクリアされるため、ユーザーが次にアプリを起動したときに MAIN アクティビティに移動します。

于 2012-07-08T19:52:36.477 に答える
0

EXITボタンをTurn GPS offボタンに変更することを考えましたが、ユーザーが戻る矢印を使用して終了すると、メインページに戻り、GPSが再びオンになります。

これは、プロセスを「終了」しようとするよりも適切な解決策のルートです。偶発的な再アクティブ化を処理する必要があるだけです。

  • GPS を無効にした後、HOME インテントを自動的に送信できます。

  • そこで戻るボタンを無効にして、代わりに HOME インテントを送信できます (GPS がオフの場合)。

  • GPS をオフにするときに共有設定でフラグを設定して、GPS がオフであることを示し、それ以外の場合は自動的にオンにするアクティビティでそれを確認できます。GPS がオフになっていることを検出した場合、通常は GPS がオフになっているというダイアログを表示して、オンに戻すか「終了」するかを尋ねる (つまり、ホーム画面へのインテント) だけを選択します。

于 2012-07-08T17:13:15.477 に答える