2

GalaxyS2をAndroid4にアップグレードしてから、オーディオプレーヤーアプリケーションで奇妙な問題が発生しています。アップグレード後、MediaMetadataRetrieverは、トラック番号と埋め込まれた画像以外の多くの情報を出力しません。タイトルもアーティストも、ほとんど何もありません。

Android 4.0.3エミュレーターに同じ問題がないという問題がさらに悪化しているため、私は現在途方に暮れています。

この種の問題を抱えているのは私だけだとは想像しがたいですが、これをグーグルで検索してもあまり役に立ちませんでした。妻のSGS2でも同じ問題が発生しているので、私の電話に限った奇妙な問題になるとは思いません。それがSGS2のICSに限定された問題である可能性があるかどうか誰かが知っていますか?他の誰かがICS上のMediaMetadataRetrieverで問題を経験しましたか?そして、私は最も重要なことだと思いますが、誰かがこれに対する解決策を持っていますか?

私のアプリケーションがあなたの電話でその問題を抱えているかどうかを確認したい場合は、http://www.sourceforge.net/projects/andrstorytellerでコードまたはAPKのいずれかを入手できます

問題を追跡する方法についての一般的なアドバイスも役立ちます。

4

3 に答える 3

3

少し時間があればサンプルアプリケーションをテストしますが、APIの互換性が制限され、(明らかに)常に機能するとは限らないため、MediaMetadataRetriever以外の別のソリューションについても検討することをお勧めします。私のプロジェクトであるServeStreamは、メタデータを取得するために、ApacheTikaの簡略版を使用しています。自分のプロジェクトでこのアプローチを検討することをお勧めします。解析を行うためのTikajarとクラスへのURLは次のとおりです。

http://servestream.svn.sourceforge.net/viewvc/servestream/trunk/lib/tika-app-1.0.jar?view=log http://servestream.svn.sourceforge.net/viewvc/servestream/trunk/src /net/sourceforge/servestream/utils/MetadataRetriever.java?revision=1033&view=markup

于 2012-04-27T19:39:14.220 に答える
3

ICSでも同じ問題に気づきました(GalaxySIIとGalaxyTabIIの両方でICS4.0.3を実行しています)。これはmp3にのみ影響するようです。

ウィリアムが提案した解決策の1つは外部ライブラリを使用することだと思いますが、外部ライブラリではなくandroidが提供するものを使用することも好みます。

気になるのは、これ以外に同じ問題を報告している他の投稿が見つからないことです。しかし、私はそれを間違っているとは思いません:

私は2つの解決策を試しました:

MediaMetadataRetriever mmdr = new MediaMetadataRetriever();
mmdr.setDataSource(path);
String title = mmdr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);

File file = new File(path);
FileInputStream inputStream;
inputStream = new FileInputStream(file);
mmdr = new MediaMetadataRetriever();
mmdr.setDataSource(inputStream.getFD());
inputStream.close();
String title = mmdr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);

MediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE)は常にnullを返します。

パスは正しく、mp3ファイルにはタイトルとすべてが記載されたID3タグが含まれています。

外部ライブラリを使用する以外に私が考えた解決策は、ファイルのパスでMediaStoreにクエリを実行することです。

Cursor c = mContext.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new String[] {MediaStore.MediaColumns.TITLE},
                            MediaStore.MediaColumns.DATA + "=?",
                            new String[] { path }, null);

String title;
if(c!=null && c.moveToFirst())
 title = c.getString(c.getColumnIndex(MediaStore.MediaColumns.TITLE))
}

MediaScannerがスキャンした場合(あるはずです)、情報がそこにあるはずです。これは、10より前のAPIレベルでも機能するはずです。

基本的に、私のプロジェクトで行うことは次のとおりです。SDKバージョンが10未満、またはファイルの拡張子がmp3でSDKバージョンが15の場合、MediaStoreにクエリを実行します。それ以外の場合は、MediaMetaDataRetrieverを使用します。

于 2012-09-25T10:52:15.590 に答える
1

状況について少し更新します。いくつかのOgg/Vorbisファイルを携帯電話に置いたところ、タグを正しく読み取ることができます。さらにいくつかのファイルでテストする必要がありますが、おそらくこれはMP3ファイルでは機能しなくなっただけです。これをテストするために、ICS電話を持っている人をさらに数人集めることができれば素晴らしいと思います。とにかく、私は現在、この情報を取得するための別の方法を検討しているので、おそらくMediaMetadataRetrieverをずっと長く使用することはないでしょう。

于 2012-05-04T15:43:58.473 に答える