Radio World - 75,000+ Worldwide FM Radio stations..

PAID
By DT Solutions | Updated ืœืคื ื™ ื—ื•ื“ืฉ | Music
Popularity

8.7 / 10

Latency

1,262ms

Service Level

98%

Health Check

N/A

Back to All Tutorials (2)

HTTP Trust certificate for Android

**This is only for those, who wants HTTPS protocal in an Android platforms. Else ignore it **

==================================================================================================================

import android.annotation.SuppressLint;

import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

@SuppressLint(โ€œCustomX509TrustManagerโ€)
public class HttpsTrustManager implements X509TrustManager {

private static TrustManager[] trustManagers;
private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[]{};

@SuppressLint("TrustAllX509TrustManager")
@Override
public void checkClientTrusted(
        X509Certificate[] x509Certificates, String s) {

}

@SuppressLint("TrustAllX509TrustManager")
@Override
public void checkServerTrusted(
        X509Certificate[] x509Certificates, String s) {

}

@Override
public X509Certificate[] getAcceptedIssuers() {
    return _AcceptedIssuers;
}

public static void allowAllSSL() {
    HttpsURLConnection.setDefaultHostnameVerifier((arg0, arg1) -> true);

    SSLContext context = null;
    if (trustManagers == null) {
        trustManagers = new TrustManager[]{new HttpsTrustManager()};
    }

    try {
        context = SSLContext.getInstance("TLS");
        context.init(null, trustManagers, new SecureRandom());
    } catch (NoSuchAlgorithmException | KeyManagementException e) {
        e.printStackTrace();
    }

    assert context != null;
    HttpsURLConnection.setDefaultSSLSocketFactory(context
            .getSocketFactory());
}

}

=============================================================================================================================

import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.PlaybackException;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.extractor.ts.DefaultTsPayloadReaderFactory;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
import com.google.android.exoplayer2.source.hls.DefaultHlsExtractorFactory;
import com.google.android.exoplayer2.source.hls.HlsMediaSource;
import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultDataSource;
import com.google.android.exoplayer2.upstream.DefaultHttpDataSource;
import com.google.android.exoplayer2.upstream.HttpDataSource;

public class RadioService extends Service {

private ExoPlayer exoPlayer;

@Override
public void onCreate() {
   //INIT EXOPLAYER.............................................................................................................................................
    AdaptiveTrackSelection.Factory trackSelectionFactory = new AdaptiveTrackSelection.Factory();
    DefaultTrackSelector trackSelector = new DefaultTrackSelector(context, trackSelectionFactory);

    exoPlayer = new ExoPlayer.Builder(context)
            .setTrackSelector(trackSelector)
            .build();
    exoPlayer.addListener(listener);

    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getClass().getName());
    mWakeLock.setReferenceCounted(false);

    WifiManager.WifiLock wifiLock = ((WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE))
            .createWifiLock(WifiManager.WIFI_MODE_FULL, "RadioLock");
    wifiLock.acquire();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
   //HANDLE YOUR INTENT ACTION HERE.........................................................................................
    return START_NOT_STICKY;
}

    //Execute playing class
private void startPlaying() {
    StreamClass streamClass = new StreamClass();
    streamClass.execute();
}

   //INIT YOUR STREAM CLASS.................................................................................................
private class StreamClass extends AsyncTask<String, Void, Boolean> {

    MediaSource mediaSource;

    protected void onPreExecute() {
        
    }

    protected Boolean doInBackground(final String... args) {
        HttpsTrustManager.allowAllSSL();             //HERE YOU ALLOW ALL HTTP PROTOCAL SSL. Go back & check that class......................<<<<<<<<<<<<<<<---------
        String url = "radio_url";
        String userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:40.0) Gecko/20100101 Firefox/40.0"; //OPTIONAL BUT YOU GIVE IT A TRY
        HttpDataSource.Factory httpDataSourceFactory = new DefaultHttpDataSource.Factory().
                setUserAgent(getUserAgent()).setAllowCrossProtocolRedirects(true);

        DataSource.Factory dataSourceFactory = new DefaultDataSource.Factory(getApplicationContext(),
                httpDataSourceFactory);

        if (url.endsWith(".m3u8")) {
            mediaSource = new HlsMediaSource.Factory(dataSourceFactory).
                    setExtractorFactory(new DefaultHlsExtractorFactory(
                            DefaultTsPayloadReaderFactory.FLAG_IGNORE_H264_STREAM,
                            true))
                    .setAllowChunklessPreparation(true)
                    .createMediaSource(MediaItem.fromUri(url));

        } else {
            mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
                    .createMediaSource(MediaItem.fromUri(url));
        }
        return true;
    }

    @Override
    protected void onPostExecute(Boolean aBoolean) {
        super.onPostExecute(aBoolean);
    
        exoPlayer.seekTo(exoPlayer.getCurrentMediaItemIndex(), exoPlayer.getCurrentPosition());
        exoPlayer.setMediaSource(mediaSource);
        exoPlayer.prepare();
        exoPlayer.setPlayWhenReady(true);
    }

}

Player.Listener listener = new Player.Listener() {

    @Override
    public void onPlaybackStateChanged(int playbackState) {
        if (playbackState == Player.STATE_ENDED) {
            //NEXT EVENT
        } else if (playbackState == Player.STATE_BUFFERING) {
            //BUFFERING EVENT
        } else if (playbackState == Player.STATE_READY) {
            //createNotification();
        }
    }

    @Override
    public void onPlayWhenReadyChanged(boolean playWhenReady, int reason) {
        if (playWhenReady) {
            if (!mWakeLock.isHeld()) {
                mWakeLock.acquire(60000);
            }
        } else {
            if (mWakeLock.isHeld()) {
                mWakeLock.release();
            }
        }
    }

    @Override
    public void onPlayerError(@NonNull PlaybackException error) {
        RadioService.this.onPlayerError();
    }
};

private void play() {
    exoPlayer.setPlayWhenReady(true);
    exoPlayer.seekTo(exoPlayer.getCurrentMediaItemIndex(), exoPlayer.getCurrentPosition());
    //changePlayPause();
    //updateNotification();
}


public static String getUserAgent() {
    StringBuilder result = new StringBuilder(64);
    result.append("Dalvik/");
    result.append(System.getProperty("java.vm.version"));
    result.append(" (Linux; U; Android ");
    String version = Build.VERSION.RELEASE;
    result.append(version.length() > 0 ? version : "1.0");
    if ("REL".equals(Build.VERSION.CODENAME)) {
        String model = Build.MODEL;
        if (model.length() > 0) {
            result.append("; ");
            result.append(model);
        }
    }
    String id = Build.ID;

    if (id.length() > 0) {
        result.append(" Build/");
        result.append(id);
    }

    result.append(")");
    return result.toString();
}

}