2011-06-19 12 views
0

私は、iPodミュージックライブラリにアクセスしようとしています。その後、アプリケーションがバックグラウンドのときにローカル通知を作成しています。選択したサウンドをローカル通知で再生したい。私の問題はAppleが30秒以下のファイルのみを許可することです。長さで。iPod音楽ライブラリにアクセスし、長さが音声リストを表示

長さが30秒未満の音だけのリストを取得する方法はありますか?

このリストが表示されたら、選択したメディアファイルを自分のリソースバンドルにコピーする必要があります。 それから私は地元の通知にそれを聞くことができます。メディアアイテムをローカル通知に直接送信する方法がある場合は、その限りではありません。

助けるためにすべてのおかげで...

+0

最後にチェックしたアプリバンドルには書き込みできません。 –

+0

http://blog.tapsquare.com/post/803301658/ipod-library-accessこのリンクは、それが可能であるが、何かを得る方法がないと言っています –

+0

あなたはまだあなたのアプリケーションバンドルに書き込むことができません。コードの署名を破る(そして、とにかくかなり悪い練習です)。ライブラリ、ドキュメント、および一時ディレクトリに書き込むことができます(また、これらのパスを取得する方法の例がたくさんあります)。しかし、これらのサウンドを通知から再生できるかどうかは不明です( '。/Library/Application Support/MyApp/MySound.mp4'など)、信頼性の高い動作が保証されていません。 Documentsディレクトリは「伝統的」ですが、iTunesのファイル共有によって公開されています。あなたはおそらく図書館に何かを求めています。 –

答えて

0

は、あなたが「音楽」の下の項目のみ(いないポッドキャストや着メロを)したいと仮定すると、このようなものは動作するはずです:

MPMediaQuery * query = [MPMediaQuery songsQuery]; 
NSArray * items = [query items]; 
NSPredicate * predicate = [NSPredicate predicateWithBlock: 
    ^(id evaluatedObject, NSDictionary *bindings){ 
    MPMediaItem * item = evaluatedObject; 
    NSNumber * duration = [item valueForProperty:MPMediaItemPropertyPlaybackDuration]; 
    return [duration doubleValue] < 30; 
    }]; 
NSArray * filteredItems = [items filteredArrayUsingPredicate:predicate]; 

残念ながらMPMediaPropertyPredicateことはできません。私たちは "比較時間が30秒未満"(比較タイプは "EqualTo"と "Contains")でフィルタリングするので、上で手動で行います。

次に、AVAssetExportSessionを使用して目的のトラックを書き出す必要があります。 Local and Push Notification Programming Guideでサポートされているフォーマットの1つに変換する必要があります。固定ファイル名を使用することをお勧めします。作成したファイルを追跡するのが簡単です。

最後に、アプリケーションバンドルに書き込むことはできません。これはコード署名を無効にするためです(明らかに以前は可能でしたが、インストール時にのみ署名がチェックされる可能性があります)。ただし、の場合、../Library/Application Support/MyApp/MySound.mp4のような相対パスを使用できます。

これは動作することが保証されていないため、アプリレビューに失敗する可能性があります。特に、

  • パスが../Libraryで始まる保証はありません。相対パスを生成するアルゴリズムは、この回答の範囲を超えています。 (-[NSString stringByAppendingPathComponent:]で動作しないため、絶対パスは機能しない可能性があります)
  • UILocalNotification.soundNameがパスを受け入れるという保証はありません。ドキュメントは単にアプリケーションのメインバンドル内のサウンドリソースのファイル名(拡張子を含む)を受け入れると言っています。
関連する問題