It's a kind of magic… VideoView and displaying videos on Android 3.1 vs. 4.1

心已入冬 提交于 2019-12-24 05:29:10

问题


Hi android programmers,

I've been struggling all day long on a problem that seems strange and with no solution. What I seek is some guidance and some previous experiences. For testing purposes I have a Motorola Xoom, Galaxy Nexus Tab, Galaxy Nexus phone, and a Galaxy Tab 10.1.

The main testing application is developed for/in the Galaxy Tab 10.1. The application is very simple. Pressing a button -> starting a video.

The application runs fine on the Jelly Beans devices. But on the 3.1 devices I can only hear the audio while no video appears.

To troubleshoot the issue I created a grid with many different codecs/resolutions, but this seems not to affect the playback (still only audio and no video).

Needless to say, the application runs smoothly on the Jelly Beans phone and tablet.

Has anybody had prior experience with the Xoom or/and the Galaxy Tab 10.1?

Just in case some might think there's a problem with my code here is it:

VideoView v[];
@Override
public void onCreate(Bundle savedInstanceState) {
    // Enable some Menu options
    super.MENU_HELP = true;
    super.BACK_ACTIVATED =true;

    super.onCreate(savedInstanceState);

    setContentView(R.layout.video_view);
    // A mix of different codecs and resolutions
    String fileName[] = {
            "v1.mkv",
            "v2.m4v",
            "v3_mpg4.m4v",
            "v4.m4v",
            "v5_and_mid.m4v",
            "v6_ipad.m4v",
            "v7_ipod.m4v",
            "v8.m4v",
            "v9.mp4"};

    v = new VideoView[9];

    v[0] = (VideoView) findViewById(R.id.v1);
    v[1] = (VideoView) findViewById(R.id.v2);
    v[2] = (VideoView) findViewById(R.id.v3);
    v[3] = (VideoView) findViewById(R.id.v4);
    v[4] = (VideoView) findViewById(R.id.v5);
    v[5] = (VideoView) findViewById(R.id.v6);
    v[6] = (VideoView) findViewById(R.id.v7);
    v[7] = (VideoView) findViewById(R.id.v8);
    v[8] = (VideoView) findViewById(R.id.v9);

    String root = Environment.getExternalStorageDirectory().toString();

    for (int i=0; i<9; i++) {   
        v[i].setVideoPath(root + "/Videos/" + fileName[i]);
        v[i].start();
    }
}

EDIT: Manifest File

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="org.app"
        android:versionCode="1"
        android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="3"
    android:targetSdkVersion="12" />


    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.intent.action.CALL_PRIVILEGED" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.SET_DEBUG_APP" />

    <supports-screens
        android:anyDensity="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:resizeable="true"
        android:smallScreens="true" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".Main"
            android:label="@string/app_name"
            android:screenOrientation="landscape" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name=".MyVideoPlayer"
            android:label="@string/app_name"
            android:screenOrientation="landscape" />
    </application>

</manifest>

EDIT2:

Adding the following line after the VideoView is setup:

Log.i("MyVP", "" + v.isOpaque() + " " + v.isEnabled() + " " + v.isPlaying() + " " + v.isShown());

it shows false true false false

I tried changing the Alpha of the VideoView and of the root View, but still the result is the same.

PS: Almost all the files (the compatible ones) can be opened with the Video player application embedded in Android. But I need to play them inside the application...


回答1:


According to your manifest file, your sdk version are not compatible with your other devices. uses-sdk android:minSdkVersion="12" .

<uses-sdk
        android:minSdkVersion="3"
        android:targetSdkVersion="12" />

Edit your code according to it, good luck!




回答2:


To all the people that might end up here. Probably the best solution to this would be to follow this link here:

WebView and HTML5 <video>



来源:https://stackoverflow.com/questions/11676726/its-a-kind-of-magic-videoview-and-displaying-videos-on-android-3-1-vs-4-1

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!