3

アプリケーションの拡張ファイルをテストするすべての手順に従いました。私が今行き詰まっているのは、その拡張ファイルに含まれるビデオ ファイルを再生する方法です。

Google Play から正常にダウンロードできました。ファイル マネージャーを参照すると、あるはずのフォルダーに表示されます。

ファイルを再生する方法を見つけようとして、過去数日間探しました。現時点では、テスト用に適切なサイズを維持するためのものは 1 つだけです。

URI を解析して videoview に設定しようとしましたが、常にビデオを再生できないことが示されます。

また、これまでにこのコードにアクセスしてみました(ドキュメントで読んだように、パラメーターを自分のパラメーターに置き換えました):

// Get a ZipResourceFile representing a merger of both the main and patch files
ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(appContext,
    mainVersion, patchVersion);

// Get an input stream for a known file inside the expansion file ZIPs
InputStream fileStream = expansionFile.getInputStream(pathToFileInsideZip);

ビデオを再生するには、入力ストリームをどうすればよいですか?

4

3 に答える 3

0

プロバイダーを使用する (私にとって最良の解決策)! テストしましたが、完璧に動作します。

Android: APEZ を使用して .obb からメディア ファイルを読み取るを参照してください。

于 2015-06-22T09:09:18.323 に答える
0

プロバイダのコード

public class EHZipUriProvider extends APEZProvider {

@Override
public String getAuthority() {
    // TODO Auto-generated method stub
    return "your.package.name.Utility.EHZipUriProvider";
}

}

カスタム動画プレーヤー

public static final Uri CONTENT_URI = Uri
        .parse("content://your.package.name.Utility.EHZipUriProvider");

public static VideoView mview;

public static void playVideo(Context context, VideoView resource, String VIDEO_NAME) {
    position = 0;
    mview = resource;
    Uri video = Uri.parse((CONTENT_URI + "/" + VIDEO_NAME));
    mview.setVideoURI(video);
    mview.start();

    mview.setOnCompletionListener(new OnCompletionListener() {

        @Override
        public void onCompletion(MediaPlayer mp) {
            // TODO Auto-generated method stub
            mview = null;
        }
    });
}

呼びかけ活動

VideoPlayer.playVideo(context, vv, "rulesofenglish.mp4");
于 2013-11-14T10:48:17.103 に答える
0

たとえば、私のアプリケーション パッケージ名は次のとおりです。

com.bluewindsolution.android.sampleapp

次に、私の拡張ファイルは

main.1.com.bluewindsolution.android.sampleapp.obb

詳細については、こちらを参照してください。

[メイン|パッチ].< 拡張バージョン >.< パッケージ名 >.obb


拡張から、次の 3 つの方法で取得できます。

AssetFileDescriptor 経由

// This one works with an image file and a media file.
// Get a ZipResourceFile representing a specific expansion file
// mainContext, version number of your main expansion, version number of your patch
ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(this, 1, 0);
AssetFileDescriptor afd_img1 = expansionFile.getAssetFileDescriptor("your_path/your_file.jpg");
AssetFileDescriptor afd_mpbg = expansionFile.getAssetFileDescriptor("your_path/your_file.mp3");

// To set image
ImageView imageView1 = (ImageView)findViewById(R.id.iv1);
imageView1.setImageBitmap(BitmapFactory.decodeFileDescriptor(afd_iv1.getFileDescriptor()));

// To set sound
try {
    mpbg.setDataSource(afd_mpbg.getFileDescriptor(), afd_mpbg.getStartOffset(), afd_mpbg.getDeclaredLength());
    mpbg.prepareAsync();
    mpbg.start();
} catch (IllegalStateException e) {
    Log.w("Error=====", "Failed to prepare media player", e);
}

InputStream 経由:

// This one works with an image file and a media file.
// Get a ZipResourceFile representing a specific expansion file

ZipResourceFile expansionFile = new ZipResourceFile(filePathToMyZip);

// Get an input stream for a known file inside the expansion file ZIPs

InputStream fileStream = expansionFile.getInputStream(pathToFileInsideZip);

ウリ経由

// This one can use in almost thing such as jpg, mp3, mp4, pdf, etc.

// You need to create a new class to override APEZProvider
public class ZipFileContentProvider extends APEZProvider {
    @Override
    public String getAuthority() {
        return "com.bluewindsolution.android.sampleapp";
    }
}

// You need to add <provider> in AndroidManifest.xml
<provider
 android:name="com.bluewindsolution.android.sampleapp.ZipFileContentProvider"
   android:authorities="com.bluewindsolution.android.sampleapp"
      android:exported="false"
      android:multiprocess="true"
    >
    <meta-data android:name="mainVersion"
              android:value="1"></meta-data>
</provider>

// After that, you can use it any time by this code:
String filename2 = "image/i_commu_a_1_1_1_1.jpg"; // suppose you store put your file in directory in .obb
String uriString2 = "content://com.bluewindsolution.android.sampleapp" +  File.separator + filename2;
Uri uri2 = Uri.parse(uriString2);
imageView2.setImageURI(uri2);

// Filename inside my expansion file
String filename = "video/v_do_1_1_1.mp4"; // Suppose you store put your file in directory in .obb
String uriString = "content://com.bw.sample_extension_download_main" +  File.separator + filename;
Uri uri = Uri.parse(uriString);

v1 = (VideoView)findViewById(R.id.videoView1);
v1.setVideoURI(uri);
v1.start();
于 2015-06-19T18:03:56.173 に答える