【问题标题】:How to play online radio streaming url in Android. How to play .pls radio streaming url in android如何在 Android 中播放在线广播流 url。如何在 android 中播放 .pls 广播流 url
【发布时间】:2016-04-28 23:46:37
【问题描述】:

我在我的服务器中创建了一个 XML 文件。它包含titlelink 标签。我获取标签并将它们显示为ListView 中的链接。从那里,当用户单击链接时,我想在 Radio Station 应用程序中播放 .pls 文件。

这是我的 XML 文件:

<item>
    <title> Kushi FM </title>
    <link>http://108.163.197.114:8071/listen.pls</link>
</item>

我不知道如何在下一个活动中播放链接。

MainActivity:

public class MainActivity extends AppCompatActivity {
    // All static variables
    static final String URL1 = "http://servernmae.com/stations";
    // XML node keys
    static final String KEY_ITEM = "item"; // parent node
    static final String KEY_TITLE = "title";
    static final String KEY_LINK = "link";
    URL url;

    URLConnection urlConnection;
    //Context context;
    ListView listview;
    int images=R.drawable.radio;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       // isNetworkAvailable(this);

        listview = (ListView) findViewById(R.id.list);

        if(isNetworkAvailable(this))
        {
            new GetData().execute();

        }else {
            Toast.makeText(getApplicationContext(), "Please Connect to Internet and Check Again ! Thanks)",
                    Toast.LENGTH_LONG).show();
        }



    }
    private boolean isNetworkAvailable(Context context) {
        ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity != null) {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null) {
                for (int i = 0; i < info.length; i++) {
                    Log.w("INTERNET:",String.valueOf(i));
                    if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                        Log.w("INTERNET:", "connected!");
                        return true;
                    }
                }
            }
        }
        return false;
    }

    class GetData extends AsyncTask<String, String, String> {
        String xml = "error";

        @Override
        protected String doInBackground(String... params) {

            try {
                url = new URL(URL1);

                urlConnection = (HttpURLConnection) url.openConnection();

                InputStream in = urlConnection.getInputStream();

                InputStreamReader isw = new InputStreamReader(in);

                BufferedReader br = new BufferedReader(isw);
                StringBuilder sb = new StringBuilder();
                String line;
                while ((line = br.readLine()) != null) {
                    sb.append(line + "\n");
                }
                br.close();

                xml = sb.toString();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }


            return xml;
        }


        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);

            final ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
            ArrayList<String> title= new ArrayList<>();
            //title.add("");

            Document doc = null;
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            try {

                DocumentBuilder db = dbf.newDocumentBuilder();

                InputSource is = new InputSource();
                is.setCharacterStream(new StringReader(xml));
                doc = db.parse(is);


                NodeList nl = doc.getElementsByTagName(KEY_ITEM);
                for (int i = 0; i < nl.getLength(); i++) {
                    HashMap<String, String> map = new HashMap<String, String>();
                    Element e = (Element) nl.item(i);
                    Log.e("TAg1", getValue(e, KEY_TITLE));
                    //Log.e("TAg2", getValue(e, KEY_LINK));
                    map.put(KEY_TITLE, getValue(e, KEY_TITLE));
                    map.put(KEY_LINK, getValue(e, KEY_LINK));
                    menuItems.add(map);

                    title.add(getValue(e, KEY_TITLE));
                }


            } catch (ParserConfigurationException e) {
                Log.e("Error: ", e.getMessage());
            } catch (SAXException e) {
                Log.e("Error: ", e.getMessage());
            } catch (IOException e) {
                Log.e("Error: ", e.getMessage());

            }
            String[] dataArr = new String[title.size()];
            dataArr = title.toArray(dataArr );
            CustomAdapter adapter = new CustomAdapter(getApplicationContext(), dataArr );
            listview.setAdapter(adapter);
            listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    //HashMap<String, String> selectedMap = menuItems.get(position);
                    HashMap<String,String> selectedMap= menuItems.get(position);
                    String urls = selectedMap.get(KEY_LINK);
                    Intent intent = new Intent(MainActivity.this, Service_Player.class);
                    intent.putExtra("url",urls);
                    startActivity(intent);

                }

            });




        }

        public final String getElementValue(Node elem) {
            Node child;
            if (elem != null) {
                if (elem.hasChildNodes()) {
                    for (child = elem.getFirstChild(); child != null; child = child.getNextSibling()) {
                        if (child.getNodeType() == Node.TEXT_NODE) {
                            return child.getNodeValue();
                        }
                    }
                }
            }
            return "";
        }

        public String getValue(Element item, String str) {
            NodeList n = item.getElementsByTagName(str);
            return this.getElementValue(n.item(0));
        }


    }

Service_player.java

public class Service_Player extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_service__player);
        startService(new Intent(this, MediaPlayerService.class));
        String url = getIntent().getStringExtra("url");
        if (!TextUtils.isEmpty(url))
            startMediaPlayer(url);


    }
    @Override
    protected void onResume() {
        super.onResume();
        registerReceiver(receiverFromservice, new IntentFilter(MediaPlayerService.SERVICE_TO_ACTIVITY));
    }

    private String currentPlayerStatus = "N/A";
    private BroadcastReceiver receiverFromservice = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (MediaPlayerService.SERVICE_TO_ACTIVITY.equalsIgnoreCase(action)) {
                /*
                * To get current status of player
                * */
                currentPlayerStatus = intent.getStringExtra(MediaPlayerService.PLAYER_STATUS_KEY);
                Log.e("Player Mode", "" + currentPlayerStatus);
            }
        }
    };

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(receiverFromservice);
    }
    public void startMediaPlayer(String url) {
        Intent intent = new Intent();
        intent.setAction(MediaPlayerService.BROADCAST_TO_SERVICE);
        intent.putExtra(MediaPlayerService.PLAYER_FUNCTION_TYPE, MediaPlayerService.PLAY_MEDIA_PLAYER);
        intent.putExtra(MediaPlayerService.PLAYER_TRACK_URL, url);
        sendBroadcast(intent);
}

MediaPlayerService.java

public class MediaPlayerService extends Service {

    public static final String BROADCAST_TO_SERVICE = "com.mediaplayer.playerfunction";
    public static final String SERVICE_TO_ACTIVITY = "com.mediaplayer.currentPlayerStatus";
    public static final String PLAYER_FUNCTION_TYPE = "playerfunction";
    public static final String PLAYER_TRACK_URL = "trackURL";
    public static final int PLAY_MEDIA_PLAYER = 1;
    public static final int PAUSE_MEDIA_PLAYER = 2;
    public static final int RESUME_MEDIA_PLAYER = 3;
    public static final int STOP_MEDIA_PLAYER = 4;
    public static final int CHANGE_PLAYER_TRACK = 5;
    public static final String PLAYER_STATUS_KEY = "PlayerCurrentStatus";
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        IntentFilter intentFilter = new IntentFilter(BROADCAST_TO_SERVICE);
        registerReceiver(playerReceiver, intentFilter);
        if (mPlayer != null && mPlayer.isPlaying()) {
            sendPlayerStatus("playing");
        }
        return START_STICKY;
    }

    private BroadcastReceiver playerReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (BROADCAST_TO_SERVICE.equalsIgnoreCase(action)) {
                String trackURL = intent.hasExtra(PLAYER_TRACK_URL) ? intent.getStringExtra(PLAYER_TRACK_URL) : "";
                int function = intent.getIntExtra(PLAYER_FUNCTION_TYPE, 0);
                switch (function) {
                    case CHANGE_PLAYER_TRACK:
                        changeTrack(trackURL);
                        break;
                    case STOP_MEDIA_PLAYER:
                        stopPlayer();
                        break;
                    case PLAY_MEDIA_PLAYER:
                        startMediaPlayer(trackURL);
                        break;
                    case PAUSE_MEDIA_PLAYER:
                        pausePlayer();
                        break;
                    case RESUME_MEDIA_PLAYER:
                        resumePlayer();
                        break;
                }

            }
        }
    };
    private MediaPlayer mPlayer;

    private void pausePlayer() {
        if (mPlayer != null && mPlayer.isPlaying()) {
            mPlayer.pause();
            sendPlayerStatus("pause");
        }
    }

    private void resumePlayer() {
        if (mPlayer != null && !mPlayer.isPlaying()) {
            mPlayer.start();
            sendPlayerStatus("playing");
        }
    }

    private void changeTrack(String url) {
        stopPlayer();
        startMediaPlayer(url);

    }

    private void stopPlayer() {
        if (mPlayer != null) {
            mPlayer.stop();
            mPlayer.release();
            mPlayer = null;
            sendPlayerStatus("stopped");

        }
    }

    public void startMediaPlayer(String url) {
        if (TextUtils.isEmpty(url))
            return;
        if (mPlayer == null)
            mPlayer = new MediaPlayer();
        try {
            mPlayer.setDataSource(url);
            mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {

                @Override
                public boolean onError(MediaPlayer mp, int what, int extra) {
                    if (extra == MediaPlayer.MEDIA_ERROR_SERVER_DIED
                            || extra == MediaPlayer.MEDIA_ERROR_MALFORMED) {
                        sendPlayerStatus("erroronplaying");
                    } else if (extra == MediaPlayer.MEDIA_ERROR_IO) {
                        sendPlayerStatus("erroronplaying");
                        return false;
                    }
                    return false;
                }
            });
            mPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {

                public void onBufferingUpdate(MediaPlayer mp, int percent) {
                    Log.e("onBufferingUpdate", "" + percent);

                }
            });
            mPlayer.prepareAsync();
            mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

                public void onPrepared(MediaPlayer mp) {
                    mPlayer.start();
                    sendPlayerStatus("playing");
                }
            });
            mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

                @Override
                public void onCompletion(MediaPlayer mp) {
                    Log.e("onCompletion", "Yes");
                    sendPlayerStatus("completed");
                }
            });
            mPlayer.setOnInfoListener(new MediaPlayer.OnInfoListener() {
                @Override
                public boolean onInfo(MediaPlayer mp, int what, int extra) {
                    return false;
                }
            });
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void sendPlayerStatus(String status) {
        Intent intent = new Intent();
        intent.setAction(SERVICE_TO_ACTIVITY);
        intent.putExtra(PLAYER_STATUS_KEY, status);
        sendBroadcast(intent);
    }

Manifest.xml

<!-- Internet Permissions -->
    <uses-permission android:name="android.permission.INTERNET" />

    <!-- Network State Permissions -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Service_Player"
            android:label="@string/title_activity_service__player" >
        </activity>
        <service android:name=".MediaPlayerService"></service>
    </application>

【问题讨论】:

    标签: android xml-parsing android-mediaplayer radio


    【解决方案1】:

    如果您使用 MediaPlayer 流式传输或普通 MediaPlayer 创建应用程序,我建议您使用 Service。可以轻松处理播放器背景和集中处理。

    要在Service中使用媒体播放器,您可以根据您的要求将其与BroadCastReceiver或绑定服务一起使用。如果您保留MediaPlayer相关服务会很好running in foreground 下面的代码我没有处理,请检查给定的链接。

    在示例代码中,我使用广播接收器将命令从 Activity 发送到 MediaPlayer 的服务(如播放、暂停、更改曲目等),反之亦然。

    现在要获取您从 Activity onItemClickListner 发送的 url,您需要从 Intent 获取。

    String url = getIntent().getStringExtra("url");
    

    播放器屏幕

        public class PlayerScreen extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.player);
            startService(new Intent(this, MediaPlayerService.class));
            findViewById(R.id.btnChangeTrack).setOnClickListener(clickListener);
            findViewById(R.id.btnStartMediaPlayer).setOnClickListener(clickListener);
            findViewById(R.id.btnStopMediaPlayer).setOnClickListener(clickListener);
            ToggleButton toggleButton = (ToggleButton) findViewById(R.id.togglePauseResume);
            toggleButton.setOnCheckedChangeListener(checkedChangeListener);
            /*
            * To get url which is passing from the previous activity listitem click.
            * If url which is pass from listitem click is not empty it will start player
            * */
            String url = getIntent().getStringExtra("url");
            if (!TextUtils.isEmpty(url))
                startMediaPlayer(url);
    
        }
    
        private ToggleButton.OnCheckedChangeListener checkedChangeListener = new ToggleButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (!isChecked) {
                    Intent intent = new Intent();
                    intent.setAction(MediaPlayerService.BROADCAST_TO_SERVICE);
                    intent.putExtra(MediaPlayerService.PLAYER_FUNCTION_TYPE, MediaPlayerService.PAUSE_MEDIA_PLAYER);
                    sendBroadcast(intent);
                } else {
                    Intent intent = new Intent();
                    intent.setAction(MediaPlayerService.BROADCAST_TO_SERVICE);
                    intent.putExtra(MediaPlayerService.PLAYER_FUNCTION_TYPE, MediaPlayerService.RESUME_MEDIA_PLAYER);
                    sendBroadcast(intent);
                }
            }
        };
        private View.OnClickListener clickListener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent;
                switch (v.getId()) {
                    case R.id.btnChangeTrack:
                        intent = new Intent();
                        intent.setAction(MediaPlayerService.BROADCAST_TO_SERVICE);
                        intent.putExtra(MediaPlayerService.PLAYER_FUNCTION_TYPE, MediaPlayerService.CHANGE_PLAYER_TRACK);
                        intent.putExtra(MediaPlayerService.PLAYER_TRACK_URL, "http://69.64.41.64:9938");
                        sendBroadcast(intent);
                        break;
                    case R.id.btnStartMediaPlayer:
                        startMediaPlayer("http://108.163.197.114:8071/listen.pls");
                        break;
                    case R.id.btnStopMediaPlayer:
                        intent = new Intent();
                        intent.setAction(MediaPlayerService.BROADCAST_TO_SERVICE);
                        intent.putExtra(MediaPlayerService.PLAYER_FUNCTION_TYPE, MediaPlayerService.STOP_MEDIA_PLAYER);
                        sendBroadcast(intent);
                        break;
    
                }
            }
        };
    
        @Override
        protected void onResume() {
            super.onResume();
            registerReceiver(receiverFromservice, new IntentFilter(MediaPlayerService.SERVICE_TO_ACTIVITY));
        }
    
        private String currentPlayerStatus = "N/A";
        private BroadcastReceiver receiverFromservice = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (MediaPlayerService.SERVICE_TO_ACTIVITY.equalsIgnoreCase(action)) {
                    /*
                    * To get current status of player
                    * */
                    currentPlayerStatus = intent.getStringExtra(MediaPlayerService.PLAYER_STATUS_KEY);
                    Log.e("Player Mode", "" + currentPlayerStatus);
                }
            }
        };
    
        @Override
        protected void onPause() {
            super.onPause();
            unregisterReceiver(receiverFromservice);
        }
    
        /**
         * TO start media player.It will send broadcast to Service & from service player will start
         *
         * @param url
         */
        public void startMediaPlayer(String url) {
            Intent intent = new Intent();
            intent.setAction(MediaPlayerService.BROADCAST_TO_SERVICE);
            intent.putExtra(MediaPlayerService.PLAYER_FUNCTION_TYPE, MediaPlayerService.PLAY_MEDIA_PLAYER);
            intent.putExtra(MediaPlayerService.PLAYER_TRACK_URL, url);
            sendBroadcast(intent);
        }
    }
    

    MediaPlayerService

    public class MediaPlayerService extends Service {
        public static final String BROADCAST_TO_SERVICE = "com.mediaplayer.playerfunction";
        public static final String SERVICE_TO_ACTIVITY = "com.mediaplayer.currentPlayerStatus";
        public static final String PLAYER_FUNCTION_TYPE = "playerfunction";
        public static final String PLAYER_TRACK_URL = "trackURL";
        public static final int PLAY_MEDIA_PLAYER = 1;
        public static final int PAUSE_MEDIA_PLAYER = 2;
        public static final int RESUME_MEDIA_PLAYER = 3;
        public static final int STOP_MEDIA_PLAYER = 4;
        public static final int CHANGE_PLAYER_TRACK = 5;
        public static final String PLAYER_STATUS_KEY = "PlayerCurrentStatus";
    
        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            IntentFilter intentFilter = new IntentFilter(BROADCAST_TO_SERVICE);
            registerReceiver(playerReceiver, intentFilter);
            if (mPlayer != null && mPlayer.isPlaying()) {
                sendPlayerStatus("playing");
            }
            return START_STICKY;
        }
    
        private BroadcastReceiver playerReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (BROADCAST_TO_SERVICE.equalsIgnoreCase(action)) {
                    String trackURL = intent.hasExtra(PLAYER_TRACK_URL) ? intent.getStringExtra(PLAYER_TRACK_URL) : "";
                    int function = intent.getIntExtra(PLAYER_FUNCTION_TYPE, 0);
                    switch (function) {
                        case CHANGE_PLAYER_TRACK:
                            changeTrack(trackURL);
                            break;
                        case STOP_MEDIA_PLAYER:
                            stopPlayer();
                            break;
                        case PLAY_MEDIA_PLAYER:
                            startMediaPlayer(trackURL);
                            break;
                        case PAUSE_MEDIA_PLAYER:
                            pausePlayer();
                            break;
                        case RESUME_MEDIA_PLAYER:
                            resumePlayer();
                            break;
                    }
    
                }
            }
        };
        private MediaPlayer mPlayer;
    
        private void pausePlayer() {
            if (mPlayer != null && mPlayer.isPlaying()) {
                mPlayer.pause();
                sendPlayerStatus("pause");
            }
        }
    
        private void resumePlayer() {
            if (mPlayer != null && !mPlayer.isPlaying()) {
                mPlayer.start();
                sendPlayerStatus("playing");
            }
        }
    
        private void changeTrack(String url) {
            stopPlayer();
            startMediaPlayer(url);
    
        }
    
        private void stopPlayer() {
            if (mPlayer != null) {
                mPlayer.stop();
                mPlayer.release();
                mPlayer = null;
                sendPlayerStatus("stopped");
    
            }
        }
    
        public void startMediaPlayer(String url) {
            if (TextUtils.isEmpty(url))
                return;
            if (mPlayer == null)
                mPlayer = new MediaPlayer();
            try {
                mPlayer.setDataSource(url);
                mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
    
                    @Override
                    public boolean onError(MediaPlayer mp, int what, int extra) {
                        if (extra == MediaPlayer.MEDIA_ERROR_SERVER_DIED
                                || extra == MediaPlayer.MEDIA_ERROR_MALFORMED) {
                            sendPlayerStatus("erroronplaying");
                        } else if (extra == MediaPlayer.MEDIA_ERROR_IO) {
                            sendPlayerStatus("erroronplaying");
                            return false;
                        }
                        return false;
                    }
                });
                mPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
    
                    public void onBufferingUpdate(MediaPlayer mp, int percent) {
                        Log.e("onBufferingUpdate", "" + percent);
    
                    }
                });
                mPlayer.prepareAsync();
                mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    
                    public void onPrepared(MediaPlayer mp) {
                        mPlayer.start();
                        sendPlayerStatus("playing");
                    }
                });
                mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    
                    @Override
                    public void onCompletion(MediaPlayer mp) {
                        Log.e("onCompletion", "Yes");
                        sendPlayerStatus("completed");
                    }
                });
                mPlayer.setOnInfoListener(new MediaPlayer.OnInfoListener() {
                    @Override
                    public boolean onInfo(MediaPlayer mp, int what, int extra) {
                        return false;
                    }
                });
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        private void sendPlayerStatus(String status) {
            Intent intent = new Intent();
            intent.setAction(SERVICE_TO_ACTIVITY);
            intent.putExtra(PLAYER_STATUS_KEY, status);
            sendBroadcast(intent);
        }
    }
    

    player.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/section_label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/ab_tool"
            android:text="Home" />
    
        <Button
            android:id="@+id/btnStartMediaPlayer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/section_label"
            android:text="Start Player" />
    
    
        <ToggleButton
            android:id="@+id/togglePauseResume"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/btnStartMediaPlayer"
            android:checked="true"
            android:textOff="Resume"
            android:textOn="Pause" />
    
        <Button
            android:id="@+id/btnChangeTrack"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/togglePauseResume"
            android:text="Chanage Track" />
    
        <Button
            android:id="@+id/btnStopMediaPlayer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/btnChangeTrack"
            android:text="STOP" />
    </RelativeLayout>
    

    清单

    <activity android:name=".PlayerScreen">
    
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
    
    
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <service android:name=".MediaPlayerService"></service>
    

    要从流式 url 标头数据中获取数据,您可以 check this answer

    出于测试目的,我在这里使用了两个网址

    更新 玩家活动

    public class PlayerScreen extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.player);
            startService(new Intent(this, MediaPlayerService.class));
            /*
            * To get url which is passing from the previous activity listitem click.
            * If url which is pass from listitem click is not empty it will start player
            * */
            String url = getIntent().getStringExtra("url");
            if (!TextUtils.isEmpty(url))
                startMediaPlayer(url);
    
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            registerReceiver(receiverFromservice, new IntentFilter(MediaPlayerService.SERVICE_TO_ACTIVITY));
        }
    
        private String currentPlayerStatus = "N/A";
        private BroadcastReceiver receiverFromservice = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (MediaPlayerService.SERVICE_TO_ACTIVITY.equalsIgnoreCase(action)) {
                    /*
                    * To get current status of player
                    * */
                    currentPlayerStatus = intent.getStringExtra(MediaPlayerService.PLAYER_STATUS_KEY);
                    Log.e("Player Mode", "" + currentPlayerStatus);
                }
            }
        };
    
        @Override
        protected void onPause() {
            super.onPause();
            unregisterReceiver(receiverFromservice);
        }
    
        /**
         * TO start media player.It will send broadcast to Service & from service player will start
         *
         * @param url
         */
        public void startMediaPlayer(String url) {
            Intent intent = new Intent();
            intent.setAction(MediaPlayerService.BROADCAST_TO_SERVICE);
            intent.putExtra(MediaPlayerService.PLAYER_FUNCTION_TYPE, MediaPlayerService.PLAY_MEDIA_PLAYER);
            intent.putExtra(MediaPlayerService.PLAYER_TRACK_URL, url);
            sendBroadcast(intent);
        }
    }
    

    如果有任何事情请告诉我。

    【讨论】:

    • 谢谢,但是当用户在 Listview 中单击 Fm 名称时,下一个 Activity 将自动播放,我们该怎么做???
    • 这是我在 NextActivity 中编写的代码,对吗?意图意图= getIntent();最终字符串 selectedData = intent.getStringExtra("url"); fmname.setText(selectedData); mMediaPlayer = new MediaPlayer();尝试 { mMediaPlayer.setDataSource(selectedData); mMediaPlayer.prepareAsync(); mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { public void onPrepared(MediaPlayer mp) { mMediaPlayer.start(); } });
    • Player 我的回答中的 Activity 将是您在 Player 活动的 onCreate 方法中的 Service_Player 它将从意图中获取 url 数据及其调用 startMediaPlayer 方法将启动播放器
    • 谢谢,我明白了,但我的疑问是在下一个活动中我没有放置任何按钮(如开始或停止)它是一个空的活动,收音机想要在这里播放..但是在你的 Coading 中通过按钮 id 使用 Switch 语句并播放该文件,但我没有使用任何按钮我们该怎么做? @user1140237
    【解决方案2】:
    MediaPlayer mp;
    mp=MediaPlayer.create(getApplicationContext(),Uri.parse(url))
    //Example url of  .pls file http://50.xx.xxx.xx:xx40/)
    
    mp.start();
    mp.pause();
    mp.release() (or mp.reset() as applicable)
    

    【讨论】:

      猜你喜欢
      • 2012-01-07
      • 1970-01-01
      • 2011-06-05
      • 2015-12-25
      • 1970-01-01
      • 2012-03-19
      • 2019-06-01
      • 1970-01-01
      • 2014-03-02
      相关资源
      最近更新 更多