7

iOS 4アプリケーションでは、ユーザーから指定された時間に、バックグラウンドからURLを開く必要があります。ただし、何らかの理由でバックグラウンドからURLを起動できません。URLを開くための私のコードは次のとおりです。

if (![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.stackoverflow.com"]])
{
     // the URL wasn't opened. we will ignore this for now.
}

そのコードはすべて、以前に作成されたデーモンスレッドから起動されています。YESシミュレーターでこのコードをテストしましたが、URLが開かれず、何らかの理由でメソッドが返されますが、アプリケーションを再度開くと(fast-app-switchingを介して)URLが開きます。この時点で(ローカル通知を介さずに)アプリケーションを再びフォアグラウンドにして、URLを開くことができる方法はありますか、それともバグまたは文書化されていない機能ですか。また、バックグラウンドで機能するURLを開く別の方法がある場合は、それも役立ちます。

4

3 に答える 3

5

私はそれを見つけたと思います(シミュレーターのコマンドラインがないため、Macのターミナルにコマンドを渡すため、シミュレーターでは機能しません)。これを使って:

system([[NSString stringWithFormat:@"uiopen \"%@\"", myUrlToOpen] UTF8String]);

これにより、コマンドuiopen(jailbreakを介して検出)がデバイスに渡され、そのURLが強制的に開かれます。これが私の立場にある他の人たちに役立つことを願っています。

于 2010-11-13T18:45:48.860 に答える
4

UIKit呼び出しは、メインスレッドでのみ実行できます。これはバックグラウンドスレッドで実行されているため、Safariは引き続きURLにアクセスします、アプリは引き続きアクティブであると思います。すぐにSafariを開いて、URLが読み込まれるかどうかを確認してください。

解決策は、これをメインスレッドに配置し、コードの実行時にアプリを終了することです。それはあなたがやりたいことのようには聞こえません、ごめんなさい。アプリ内からURLにアクセスする場合は、UIWebViewを表示できます。

于 2010-11-13T00:57:29.777 に答える
3

これはiOSではサポートされていません。AppleのiOSプログラミングガイドの関連セクションによると:

一部のタイプのバックグラウンド実行のサポートは、それらを使用するアプリケーションによって事前に宣言する必要があります[経由]次の値を持つ1つ以上の文字列を含む配列。

  • オーディオ-アプリケーションは、バックグラウンドでユーザーに可聴コンテンツを再生します。
  • 場所-アプリケーションは、バックグラウンドで実行しているときでも、ユーザーに自分の場所を通知し続けます。
  • voip-このアプリケーションは、ユーザーがインターネット接続を使用して電話をかける機能を提供します。

..。

上記のキーに加えて、iOSはバックグラウンドで作業を行うための他の2つの方法を提供します。

  • アプリケーションは、特定のタスクを完了するためにシステムに追加の時間を要求できます。
  • アプリケーションは、ローカル通知が所定の時間に配信されるようにスケジュールできます。

あなたの使用は、許可されたタイプのマルチタスクのいずれにも適合しません。

于 2010-11-13T00:57:29.610 に答える