SHOUTCast Streaming Breaks в 4.0+, работает в 2.3

Итак, я впервые работаю с потоком SHOUTCast, и мне сказали, что Android изменил способ работы с аудио post-ICS.

Итак, я попробовал код, который очень хорошо работал на 2.3 и 2.2, но когда я попытался запустить его на 4.2.2, он не воспроизводился,

Вот мой MainActivity.java

package com.mooo.ajbiz11.ponyfeather;

import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity implements
        MediaPlayer.OnCompletionListener, MediaPlayer.OnPreparedListener,
        MediaPlayer.OnErrorListener, MediaPlayer.OnBufferingUpdateListener {

    private String TAG = getClass().getSimpleName();
    private MediaPlayer mp = null;

    private Button play;
    private Button pause;
    private Button stop;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.activity_main);

        play = (Button) findViewById(R.id.play);
        pause = (Button) findViewById(R.id.pause);
        stop = (Button) findViewById(R.id.stop);

        play.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                play();
            }
        });

        pause.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                pause();
            }
        });

        stop.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                stop();
            }
        });
    }

    private void play() {
        Uri myUri = Uri.parse("http://radio.ponyvillelive.com:8026/stream");
        try {
            if (mp == null) {
                this.mp = new MediaPlayer();
            } else {
                mp.stop();
                mp.reset();
            }
            mp.setDataSource(this, myUri); // Go to Initialized state
            mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mp.setOnPreparedListener(this);
            mp.setOnBufferingUpdateListener(this);

            mp.setOnErrorListener(this);
            mp.prepareAsync();

            Log.d(TAG, "LoadClip Done");
        } catch (Throwable t) {
            Log.d(TAG, t.toString());
        }
    }

    @Override
    public void onPrepared(MediaPlayer mp) {
        Log.d(TAG, "Stream is prepared");
        mp.start();
    }

    private void pause() {
        mp.pause();
    }

    private void stop() {
        mp.stop();

    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        stop();

    }

    public void onCompletion(MediaPlayer mp) {
        stop();
    }

    public boolean onError(MediaPlayer mp, int what, int extra) {
        StringBuilder sb = new StringBuilder();
        sb.append("Media Player Error: ");
        switch (what) {
            case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:
                sb.append("Not Valid for Progressive Playback");
                break;
            case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
                sb.append("Server Died");
                break;
            case MediaPlayer.MEDIA_ERROR_UNKNOWN:
                sb.append("Unknown");
                break;
            default:
                sb.append(" Non standard (");
                sb.append(what);
                sb.append(")");
        }
        sb.append(" (" + what + ") ");
        sb.append(extra);
        Log.e(TAG, sb.toString());
        return true;
    }

    public void onBufferingUpdate(MediaPlayer mp, int percent) {
        Log.d(TAG, "PlayerService onBufferingUpdate : " + percent + "%");
    }

}

И мой файл activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

    <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">

        <Button
                android:text="Pause"
                android:id="@+id/pause"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="right|bottom"
                android:layout_row="3"
                android:layout_column="9"
                android:layout_marginBottom="124dp"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"></Button>

         <Button
                android:text="Stop"
                android:id="@+id/stop"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="@style/AppTheme"
                android:layout_gravity="center_horizontal|bottom"
                android:layout_row="2"
                android:layout_column="15"
                android:layout_alignTop="@+id/pause"
                android:layout_toRightOf="@+id/pause"></Button>

        <Button
                android:text="Play"
                android:id="@+id/play"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal|bottom"
                android:layout_row="5"
                android:layout_column="11"
                android:layout_alignTop="@+id/pause"
                android:layout_toLeftOf="@+id/pause"></Button>

    </RelativeLayout>

</LinearLayout>

Это отлично работает в Android 2.3 и было сделано для 2.2, но я не могу понять новые звуковые материалы в 4.0+, поэтому, когда я запускаю скомпилированный APK (который у меня есть в Dropbox, подписано) ничего не получаю...

Я очень новичок в программировании для Android, и любая помощь/понимание были бы потрясающими, но будьте осторожны... мое понимание Java очень низкое...

Кроме того, я хотел бы переключиться с трех кнопок на MediaController, но не смог найти документацию.


person user150413    schedule 24.06.2013    source источник


Ответы (1)


Пфф... цифры... запустил LogCat при запуске, заметил, что мне не хватает разрешения на доступ к Интернету...

Код безупречен, просто нужно было одно разрешение, и он работал как масло на моем планшете.

person user150413    schedule 27.06.2013