7

自動車ドライバー向けの iPhone GPS アプリケーションを開発しています。

ご存じのとおり、iOS4 ではマルチタスキングが導入されたため、アプリケーションはバックグラウンドで実行できます。これは機能の一部です。

問題は、iOS4 でアプリケーションを閉じる標準的な方法にあります。以下に 2 つのシナリオを示します。

1) ユーザーはアプリケーションをバックグラウンドにしたい:

通常、iPhone iOS4 では、「ホーム」ボタンを押すのと同じくらい簡単です。

2) ユーザーがアプリケーションをオフにしたい(つまり、目的地に到着した後):

標準的な iPhone iOS4 の手順は次のとおりです。

  • 「ホーム」ボタンを押す - アプリケーションはバックグラウンドに移行します
  • 「ホーム」ボタンを 2 回押します - 実行中のアプリケーションのリストが表示されます
  • アプリケーション アイコンの 1 つをタップ アンド ホールドします。すべてのアイコンに「シェイク」と「-」記号が表示されます。
  • ユーザーが終了したいアプリケーションアイコンで「-」記号をタップします

ユーザー、バッテリーを節約するために、どこかに到着するたびに (1 日に 2 回など)、アプリケーションを終了する必要があります。そうしないと、GPS はすぐにすべてのバッテリー電力を消費してしまいます。また、アプリケーションの主な機能には正確な位置情報が必要なため、バックグラウンドで実行中に GPS を無効にすることはできません。

もちろん、アプリケーションから「ホーム」ボタンの動作を変更することはできません (AppStore に受け入れられるようにするため)。また、予想される動作を iPhone プラットフォーム上の他のアプリケーションとはまったく異なるものに変更することは、良い解決策ではないと思います。

あれについてどう思う?何か良い解決策をご存知でしょうか。アイデアは 1 つありますが、まだ何も提案したくありません。

私たちのソリューションのアイデアは非常にシンプルです。画面の右上隅に小さな「x」ボタンを表示するだけです。それをタップすると、アプリケーションが終了します (おそらく確認の質問の後)。

このソリューションには大きな利点が 1 つあります。それは、デフォルトのシステム動作を変更しないことです。iOS4 のマルチタスクの使用を認識しているユーザーは、「ホーム」ボタンを押してバックグラウンドでアプリを実行し、iPhone のように閉じることができます。

どう思いますか?

4

9 に答える 9

6

Appleはこれを行うことをお勧めします(iPhoneアプリプログラミングガイド):

アプリケーションは、重要な場所の変更に対してのみ登録できます。(推奨)大幅な変更位置情報サービスは、iPhone OS 4以降で、セルラー無線を備えたデバイスで利用できます。これは、位置データを受信するための低電力の方法を提供し、強くお勧めします。新しい位置情報の更新は、ユーザーの位置が大幅に変更された場合にのみ提供されます。このサービスの実行中にアプリケーションが一時停止された場合、新しい場所の更新により、アプリケーションがバックグラウンドでウェイクアップされ、それらを処理します。同様に、このサービスの実行中にアプリケーションが終了した場合、新しい位置データが利用可能になると、システムはアプリケーションを自動的に再起動します。

startMonitoringSignificantLocationChangesCLLocationManagerのメソッドを呼び出して使ってみましたか?

アプリを終了するのは、最後の手段としてのみ行う必要があります。位置情報サービスを使用していないときは、アプリを終了せずに位置情報サービスをオフにすることができます。CLLocationManagerを呼び出しstopUpdatingLocationてオフにすることができます。

-(void)stopUpdatingLocation

コードが場所関連のイベントを受信する必要がなくなったときはいつでも、このメソッドを呼び出す必要があります。イベント配信を無効にすると、受信者は、クライアントが位置データを必要としないときに、適切なハードウェアを無効にする(そしてそれによって電力を節約する)オプションを利用できます。startUpdatingLocationメソッドを再度呼び出すことで、いつでも位置情報の更新の生成を再開できます。

于 2010-07-23T15:22:31.190 に答える
3

たぶん、潜在的な回避策がありますか?それは本当にあなたのアプリに依存します。これが、GPSをバックグラウンドで実行するように設計したアプリに対して行ったことです。

startMonitoringSignificantLocationChangesCLLocationManagerでiOS4のAPIを確認することを強くお勧めします。

運転中は、2km程度ごとに約500メートルの精度で更新されます。これがアプリケーションにとって十分でない場合は、アプリがシステムによって実行されている場合にのみGPSハードウェアの電源をオンにすることができます。そうすれば、2 kmごとに非常に正確な測定値を取得できますが、バッテリーを節約できます。

インテリジェントなパスファインディングおよびマッピング技術を使用して、欠落しているデータを「偽造」することもできます。

私は8台のiPhone3GS-esでバックグラウンドGPSイベントの実験を行いました。結果はここに公開されます: iPhoneバックグラウンドGPS/signficantLocationChangeイベントの予備分析

于 2010-07-23T15:23:26.020 に答える
2

目的地に到着したときに押すことができるボタンを作成して、Arrived = YES というフラグを設定してみませんか。

次に、これをアプリに追加して、ホームボタンを押したときに呼び出されるようにします。

- (void)applicationWillResignActive:(UIApplication *)application {
    if (Arrived) {
       exit(0);
    }
}

これにより、ユーザーがホーム ボタンを押したときにアプリが効果的に完全にシャットダウンされますが、ユーザーが到着したことを示している場合に限られます。それ以外の場合は、バックグラウンド モードになります。

于 2011-04-12T02:45:48.573 に答える
1

ロケーションの目的でバックグラウンドで実行する必要があり、Appleは自分のアプリを終了することを許可しないため、電力を節約するためにアプリを自分で終了する必要があることをユーザーが理解する必要があります。

手っ取り早い解決策は、目的地に到着したら位置情報サービスをオフにすることです。これが発生したことをユーザーに警告することもできます。ユーザーが[OK]ボタンを押すと、アプリが一時停止されている場合は、アプリの実行やバックグラウンドでの実行を停止できます。

于 2010-07-23T14:16:20.840 に答える
1

ユーザーが車を運転して移動している場合、正確な情報が必要になります。それはあなたも使えないという意味ではありませんよstartMonitoringSignificantLocationChangesね?

つまり、タイムアウトを使用して、調整可能な長さの「重要な変更」の受信を停止した場合に、監視 (および GPS ハードウェアへの電力供給) を正確に停止します。再び受信したら、正確に監視を再開してください。

于 2010-07-26T20:40:51.363 に答える
0

ユーザーがアクティブにナビゲートしているルートにいて、バックグラウンドに入る場合は、GPSを使い続けます。目的地にいる場合は、上記の提案を使用して、startMonitoringSignificantLocationChanges位置情報サービスに切り替えるか、オフにします。灰色の領域は、ユーザーが目的地に近く、GPSを使用しているが、ナビゲートを終了することを気にしていない場合です。つまり、GPSが想定している場所などで目的地が正しくありません。現在、アクティブにナビゲートしていますが、目的地に到達することはありません。ユーザーに迷惑をかけたり、一部の設定に依存したりすることを避けるために、動きがないか、少なくとも進行がないことを監視し、それをユーザーがもうあなたに依存していないことの手がかりとして使用し、低電力ナビゲーションに切り替えることをお勧めします。

于 2010-07-23T15:38:40.370 に答える
0

目の前に Xcode がない (仕事中の PC) ため、使用できる方法を調べることはできませんが、TomTom アプリはバックグラウンドで実行されているときに何らかの監視を行っていると思います。アラート通知を受け取ったことを思い出したからです。それが眠ろうとしていたこと。これは5〜10分後に発生したことを思い出します。

于 2010-07-30T21:47:38.363 に答える
0

アプリ内から GPS モニタリングをオフにすることはできますか? アプリケーション全体を終了する代わりに、それをオフにするためのボタンを追加できませんか? すなわち。TomTom アプリについて述べたように、アプリをスリープ状態にします。

その場合、GPS アクティビティが実行されていないことをユーザーが確認できるように、UI を何らかの方法で変更する必要がある場合があります。したがって、アプリは完全に機能していません。

于 2010-07-30T22:00:37.893 に答える
0

同様のアプリで使用しているソリューションがあります。ナビゲーション バーに「バックグラウンド モード」ボタンがあります。ユーザーがそれをクリックすると、[ホーム] をクリックするとバックグラウンドで実行されることが通知されます。アプリを起動または再アクティブ化するたびに、[ホーム] をもう一度押すと、アプリが実行されなくなります。

次に、ホーム ボタンが押されたら、フラグをチェックして、バックグラウンド モードに移行する必要があるかどうかを確認します。GPSを無効にするだけでバックグラウンドモードを回避します(UIbackgroundModesで場所を設定すると、アプリが一時停止します)

わかる?

于 2010-07-31T15:32:32.317 に答える