2012-04-03 14 views
1

私はMMSの添付ファイルとやりとりしなければならないアンドロイドアプリを開発し始めました。特に、テキスト、ビットマップ、オーディオ、ビデオなどの添付ファイルを取得し、特定のフォルダの電話に保存しています。ビデオやオーディオなどのMMSリソースにアクセスする方法は?

私はいくつかの本とウェブ上のいくつかのポストを読むことを始めましたが、これはあまり一般的な議論ではありません。私は自分がしたいことをする公式な方法を見つけませんでした。

私はここに、スタックオーバーフロー上、ここでかなり良い記事を見つけた:それは私のために非常に適しています... How to Read MMS Data in Android?が、2つの問題があります。

  1. 記事がでMMSデータを取得する方法を示しますが、 「隠された」SMS-MMSコンテンツプロバイダを照会して、私が知る限り、Googleはすべてのアンドロイドの今後のリリースで現在の構造を維持するとは保証しません。
  2. この記事では、MMSからテキストデータとビットマップデータを取得する方法についてのみ説明します...ビデオ/オーディオはどうですか?私は公式のチュートリアルや「ハウツー」の不在について非常に失望している...そのような例が、残念ながら運と、ビットマップで行ったとしてのInputStreamからのビデオ/オーディオストリームを取得するために

を試してみましたSMSとMMSの管理はモバイル開発における非常に一般的なニーズであるため、この議論よりも優れています。 誰かが私を助けてくれることを願っています....

ありがとうございます!

答えて

4

私はビデオ/オーディオデータをMMSから読み込むことができるので、MMSの添付ファイルを提供するこのクラスの部分を公開することにしました。

あなたが渡すことにより、このようなMMSからのオーディオ/ビデオ/画像などの「生」のデータを抽出することができます。このように
private static final int RAW_DATA_BLOCK_SIZE = 16384; //Set the block size used to write a ByteArrayOutputStream to byte[] 
public static final int ERROR_IO_EXCEPTION = 1; 
public static final int ERROR_FILE_NOT_FOUND = 2; 



public static byte[] LoadRaw(Context context, Uri uri, int Error){ 
    InputStream inputStream = null; 
    byte[] ret = new byte[0]; 

    //Open inputStream from the specified URI 
    try { 
     inputStream = context.getContentResolver().openInputStream(uri); 

     //Try read from the InputStream 
     if(inputStream!=null) 
      ret = InputStreamToByteArray(inputStream); 

    } 
    catch (FileNotFoundException e1) { 
     Error = ERROR_FILE_NOT_FOUND; 
    } 
    catch (IOException e) { 
     Error = ERROR_IO_EXCEPTION; 
    } 
    finally{ 
     if (inputStream != null) { 
      try { 
       inputStream.close(); 
      } 
      catch (IOException e) { 
       //Problem on closing stream. 
       //The return state does not change. 
       Error = ERROR_IO_EXCEPTION; 
      } 
     } 
    } 


    //Return 
    return ret; 
} 


//Create a byte array from an open inputStream. Read blocks of RAW_DATA_BLOCK_SIZE byte 
private static byte[] InputStreamToByteArray(InputStream inputStream) throws IOException{ 
    ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 
    int nRead; 
    byte[] data = new byte[RAW_DATA_BLOCK_SIZE]; 

    while ((nRead = inputStream.read(data, 0, data.length)) != -1) { 
     buffer.write(data, 0, nRead); 
    } 
    buffer.flush(); 
    return buffer.toByteArray(); 
} 

  1. あなたがのURIこの機能
  2. を使用する必要があるコンテキスト例えば、 "content:// mms/part/2"のような、抽出したいデータを含むMMSパート
  3. byrefパラメタは、プロシージャによってスローされる最終的なエラーコードを返します。

あなたがあなたのバイト[]を持っていれば、空のファイルを作成してからFileOutputStreamを使ってバイト[]を書き込むことができます。ファイルパス\拡張子が正しい場合、アプリケーションに右の 権限がすべてある場合は、データを保存することができます。

PS。この手順は数回テストされていましたが、機能しましたが、除外しないで、エラー状態を生成する可能性のあるいくつかのアンマネージ例外のケースがあります。 IMHOそれもまた改善されることができます...

+1

このコードスニペットありがとう!それは本当に私を助けてくれました。 MMS添付ファイルにアクセスするコード例は見つけにくいです! – jenzz

+0

私のために働いてくれてありがとう。 :) –

関連する問題