2011-08-18 15 views
5

私は本当にこれができないと思っていますが、私の上司はそれが言うところのリンクを提供したいと思っています。彼が望んでいるのは、「あなたは本当にあなたは退出してもよろしいですか?ユーザーがホームボタンを押したときに警告し、ユーザーが「いいえ」と言うと、アプリは非アクティブになりません。 できませんか?iOSホームボタン警告、可能ですか?

+0

ありがとう将来のための任意の助けになることを望む、私はそれをとにかく行うことができるとは思いませんでした。 – Samssonart

答えて

16

いいえ、あなたはこれを行うことはできません。アプリケーションにはこれについての発言はありません。上司に、これを行うiOSアプリケーションの一例を見たことがあるかどうか聞いてみてください。私が賭けるのではない。

アプリケーションはバックグラウンドで音楽をストリーミングして、場所情報を取得するなどの機能を引き続き実行できますが、アプリケーションはホームボタンをブロックできません。これを行うことができれば、アプリケーションを閉鎖することを阻止することができます。

A)あなたは、技術的にこれを行うと

Bませんでした)それはあなたが見ればあなたが

を取っていた流通経路であればAppleはApp Storeでリリースされることを許可しないだろうあなたがアプリケーションデリゲートを作成するときにはXCodeで作成されたメソッドのスタブは、

満たされている
-(void)applicationWillResignActive:(UIApplication *)application 

-(void)applicationWillTerminate:(UIApplication *)application 

はあなたが、タスク、無効タイマー、スロットルダウンフレームレートを一時停止し、データを保存するには、このメソッドを使用する方法についてのコメントは - 何もありませんが遅れて「Are you sure」というメッセージでユーザーに問い合わせることができるようになる。

このアイデアは、iPhone/Pad/Pod-Touchのユーザーエクスペリエンスに反しています。

App Storeのガイドライン(少し省略)から:

デバイス上のスイッチの動作を変更するアプリは これは家の振る舞い変更案である

を拒否されますボタン - それは拒否されます。

+0

私はApp Storeのガイドラインを著作権で保護されたドキュメントとして直接引用していませんでした。開発者アカウントを持っている場合にのみアクセスできます。しかし、iOSアプリケーションの開発を依頼されている場合は、アクセス権が必要です。私はあなたがそれを見てお勧めします。 – iandotkelly

2

これは、改良されていないAPIを使用して、刑務所に壊れたデバイスでは可能です。このコンセプトはアップルの使用ポリシーに複数の違反があるため、公式のApp Storeでこれを何らかの方法で実装しようとするアプリを今までに手に入れたことはありません。ここではいくつかの理由です:

  1. あなたが任意のボタンの機能は変更することはできません(音量ボタンを含むが、いくつかのカメラアプリは写真を撮るためにそれらを使用するために使用されるが、それらは結果として、店舗から起動しました) 。
  2. デバイスとの標準的なユーザー操作を妨げることはできません。ホームボタンは、人を家に連れて行きます。それを防ぐことはできません。また、相互作用を妨げているような確認を求めることもできます。
  3. ホームボタンの実際の使用を検出する公開APIはありません。そのため、あなたはプライベートAPIが必要であり、アップルからの明示的な許可なしにプライベートAPIを使用することはできません。上記の#1と#2のために決して与えないでしょう。

多くの理由が考えられますが、アプリストアポリシーやiOSヒューマンインターフェイスのガイドラインに直接違反しているとは限りません。

アプリがフォーカスを失う、フォーカスを失った、フォーカスが逃げる(電話が入っているなど)場合がありますが、フローを変更することはできません)。

バックグラウンドのガイドラインと制限内でバックグラウンドでコードを実行し続けることができます。バックグラウンドコードは、アプリに戻ることを許可する通知をユーザに提出することができます。アプリが閉じるたびにAppleがあなたを拒否すると期待しています。

1

明らかにiOSデベロッパーではないあなたの上司には証拠が必要です。あなたが必要なすべての証拠である必要があり

Apple Human Interface Guide

。しかし、明らかにするために、Appleはアプリが決してホームボタンを無効にすることを許可しない。ログアウトする前にアクションシートやポップアップを確実に表示して警告することができますが、ホームボタンを押すと、メモリを諦めてシャットダウンします。

0

私が見つけることができる最良の参考文献はthis oneです。それは明白ではないが、Appleのヒューマンインタフェースガイドラインには、「いつも準備を止めようと準備する」という2つの見出しがあり、その後は「プログラム的ではない」と続き、ホームボタンの機能を説明している。独自の終了戦略。

2

すでに多くの人から回答がありましたが、できません。ユーザーがホームボタンを押すと、アプリケーションへのタッチイベントを無効にするアプリケーションデリゲートのapplicationWillResignActiveが呼び出されます。その後applicationDidEnterBackgroundApple docsあたり、これ、と呼ばれる:

あなたのデリゲートのapplicationDidEnterBackground:メソッドは、すべてのタスクを完了して返すために 約5秒を持っています。実際には、 このメソッドはできるだけ早く返す必要があります。方法は 戻らない場合は、時間がなくなる前に、あなたのアプリケーションが殺され、メモリ

1

から をパージされるあなたは、IOSのストアデモモードに見たいと思うかもしれません。こうすることで、起動後に起動する最初のアプリでホームボタンを消してデバイスをロックすることができます。

1

私はこの質問に答えるには遅すぎることを知っています。

しかし、私は最近、サムソンソンが持っていた問題に遭遇しました。

@iandotkellyから返された回答は、iOS5では廃止されました。これで、デバイスをロックするか、ホームボタンを使用してアプリをバックグラウンドに送信するかを区別するためのデリゲートメソッドはありません。

これで、applicationState変数を使用して、トリガーされるアクションを定義できるようになりました。

applicationStateは、appDelegateによって提供される組み込みIDです。

**

if it returns 2 then, it will identify the Home button is pressed 
if it returns 1 then, it will identify the lock hardware button is pressed 

**

だから、あなたのケースでは、あなたは

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    NSLog(@"decision >> %d",[[UIApplication sharedApplication] applicationState]); 
} 

がプログラミングをお楽しみください**applicationDidEnterBackground**方法でこの条件をチェックアウトすることができます!

+1

私はこれについて投票したいと思います。元の質問に対する答えではありません。それはiandotkellyの答えに対するコメントでなければなりません。 – vikingosegundo

+0

はい、これは元の質問に対する回答ではありません。しかし、私はちょうど受け入れられた答えのメソッドがもう役に立たなくなったことをあなたに知らせたいと思っています。これは、あなたがそれを閉じている間に条件をチェックするのではなく、あなたのアプリに戻った後にチェックできるものです。そして、コメントに関しては、答えに手配するような言葉でコメントを整理する方法がわかりません。そういうわけで、私は答えを与え、誰にでもその方法について知らせることを好むのです。 –

0

これは古いトピックですが、この回答を更新したいだけです。 iOS 7ではこれは機能しません。 ホームとロックボタンの違いを識別するために、アプリがバックグラウンドに移動するときにscreenbrightnessを使用します。

-(void)applicationDidEnterBackground:(UIApplication *)application { if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateInactive) { NSLog(@"Sleep button pressed"); } else if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground) { if ([[UIScreen mainScreen] brightness] > 0.0) NSLog(@"Home button pressed"); else NSLog(@"Sleep button pressed"); } }

私はこのつもり誰すべてのあなたの答えのための

関連する問題