2

大きなオーディオ ファイルとビデオ ファイルを含む PhoneGap アプリケーションを構築しています。Android では、アプリケーションのサイズを Google Play の 50 MB の制限未満に保つために、メディア ファイルを拡張ファイルにする必要があります。

現在、ビデオ ファイルを再生する 2 つの方法を検討しています。

  1. 必要なビデオ ファイルを拡張ファイルから SD カードに (おそらく一時的に) 解凍し、その URL を取得して、メディア プレーヤー アプリケーションを起動します。解凍には時間がかかるため、動画のサイズによっては数秒待つ必要があります。
  2. Android の VideoView クラスを使用して、独自のビデオ プレーヤーを PhoneGap プラグインとして作成します。このようにして、最初にファイルを解凍せずに拡張ファイルから直接再生し、より応答性の高いアプリケーションを取得できます。

ただ、拡張ファイル内の動画ファイルへのURLを取得する方法はあるのでしょうか?これにより、アプリケーションは、ユーザーの好みのメディア プレーヤー アプリケーションを開始するインテントに URL を追加できるようになり、このアプローチを好みます。

4

1 に答える 1

2

私は、コンテンツ プロバイダーを通じてこれを行う方法を見つけました。質問android play movie inside Expansion fileからコンテンツ プロバイダーに関するヒントを得ましたが、その質問では、URL は外部アプリケーションの起動に使用されませんでした。

Google の APEZProvider を拡張する ContentProvider クラスが必要です。

public class ZipFileContentProvider extends APEZProvider {
    @Override
    public String getAuthority() {
        return "com.example.expansionexperiment.provider";
    }
}

また、マニフェストに追加してエクスポートする必要があります。

<provider
    android:exported="true"
    android:name="com.example.expansionexperiment.ZipFileContentProvider"
    android:authorities="com.example.expansionexperiment.provider" />

マニフェストと getAuthority() の権限は同じでなければなりません。

これで、拡張ファイル内のファイルへの Uri を作成できます。

// Filename inside my expansion file
String filename = "video/video.mp4";
String uriString = "content://com.example.expansionexperiment.provider" +  File.separator + filename;
Uri uri = Uri.parse(uriString);

// Start video view intent
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "video/*");
startActivity(intent);

コンテンツ プロバイダーは、URL だけで zip ファイルとその中のファイルにアクセスできるようになりました。

ただし、PhoneGap の Media プラグインはコンテンツ プロバイダーをサポートしていません。これは、URL が http で始まらない場合、URL の前に「/sdcard/」が挿入されるためです。(!!!) したがって、zip コンテンツ プロバイダーを介してオーディオ ファイルを再生するには、独自のオーディオ プラグインを作成する必要があります。

于 2013-06-06T12:14:41.670 に答える