如何在 Android 中播放在线广播流 url。如何在 android 中播放 .pls 广播流 url

Posted

技术标签:

【中文标题】如何在 Android 中播放在线广播流 url。如何在 android 中播放 .pls 广播流 url【英文标题】:How to play online radio streaming url in Android. How to play .pls radio streaming url in android 【发布时间】: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>

【问题讨论】:

【参考方案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_
    android:layout_>

    <TextView
        android:id="@+id/section_label"
        android:layout_
        android:layout_
        android:layout_below="@+id/ab_tool"
        android:text="Home" />

    <Button
        android:id="@+id/btnStartMediaPlayer"
        android:layout_
        android:layout_
        android:layout_below="@+id/section_label"
        android:text="Start Player" />


    <ToggleButton
        android:id="@+id/togglePauseResume"
        android:layout_
        android:layout_
        android:layout_below="@+id/btnStartMediaPlayer"
        android:checked="true"
        android:textOff="Resume"
        android:textOn="Pause" />

    <Button
        android:id="@+id/btnChangeTrack"
        android:layout_
        android:layout_
        android:layout_below="@+id/togglePauseResume"
        android:text="Chanage Track" />

    <Button
        android:id="@+id/btnStopMediaPlayer"
        android:layout_
        android:layout_
        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 让我们continue this discussion in chat。【参考方案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)

【讨论】:

以上是关于如何在 Android 中播放在线广播流 url。如何在 android 中播放 .pls 广播流 url的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中播放在线广播

Android:如何停止其他活动的媒体播放器?

播放广播流时如何设置 AVPLayer 的音量

android获取广播流数据

如何在 Android Studio (Kotlin) 中的流连接之前放置音频

从 URL React Native 录制音频(广播流)