Pavle_nis
Pavle_nis

Reputation: 141

Android pass data from class to service

How to pass value of string from class to background service ? I have created android application to read ip address from url and I want to pass value from textResult string to STREAM_URL inside background service! How can I do that ?

public class BackgroundService extends Service implements OnCompletionListener
{
    MediaPlayer mediaPlayer;
    private String STREAM_URL;
    final String textSource = "http://audiophileradio.stream/Ip.txt";

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate()
    {

    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        new MyTask().execute();

        return START_STICKY;
    }

    public void onDestroy() {
        if (mediaPlayer.isPlaying()) {
            mediaPlayer.stop();
        }
        mediaPlayer.release();
    }

    public void onCompletion(MediaPlayer _mediaPlayer) {
        stopSelf();
    }


    @Override
    public boolean onUnbind(Intent intent)
    {
        return super.onUnbind(intent);
    }

    private class MyTask extends AsyncTask<Void, Void, String>
    {
        String textResult;

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

            URL textUrl;

            try {
                textUrl = new URL(textSource);

                BufferedReader bufferReader
                        = new BufferedReader(new InputStreamReader(textUrl.openStream()));

                String StringBuffer;
                String stringText = "";
                while ((StringBuffer = bufferReader.readLine()) != null) {
                    stringText += StringBuffer;
                }
                bufferReader.close();

                textResult = stringText;
                return textResult;
            } catch (MalformedURLException e) {
                e.printStackTrace();
                textResult = e.toString();
            } catch (IOException e) {
                e.printStackTrace();
                textResult = e.toString();
            }

            return null;

        }

        @Override
        protected void onPostExecute(String result) {

            Log.d("DebugTag", "Value: " + textResult);

            super.onPostExecute(result);

            SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(BackgroundService.this);
            String radio = sharedPreferences.getString("station", "8000");

            if (radio != null && radio.equals("8000"))
            {
                STREAM_URL = "http://178.149.88.126:8000/";
            }
            if (radio != null && radio.equals("8010"))
            {
                STREAM_URL = "http://178.149.88.126:8010/";
            }
            if (radio != null && radio.equals("8020"))
            {
                STREAM_URL = "http://178.149.88.126:8020/";
            }
            if (radio != null && radio.equals("8030"))
            {
                STREAM_URL = "http://178.149.88.126:8030/";
            }

            mediaPlayer = new MediaPlayer();

            if (!mediaPlayer.isPlaying())
            {
                try
                {
                    mediaPlayer.reset();
                    mediaPlayer.setDataSource(STREAM_URL);
                    mediaPlayer.prepareAsync();

                    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
                    {
                        @Override
                        public void onPrepared(MediaPlayer mp)
                        {
                            mediaPlayer.start();
                        }
                    });
                } catch (IOException e)
                {
                    e.printStackTrace();
                }

            }

            mediaPlayer.setOnCompletionListener(BackgroundService.this);
        }
    }

}

Upvotes: 0

Views: 205

Answers (2)

Dhaval Solanki
Dhaval Solanki

Reputation: 4705

Another way is using broadcast receiver following is the example

    import android.app.Service;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.os.Bundle;
    import android.os.IBinder;
    import android.support.annotation.Nullable;


    public class TempService extends Service {

        BroadcastReceiver broadcastReceiver;

        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }

        @Override
        public void onCreate() {
            super.onCreate();
            broadcastReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    if (intent != null && intent.getAction().equals("UpdateUrl")) {
                        Bundle bundle = intent.getExtras();
                        if (bundle != null && bundle.containsKey("urlNew")) {
                            String newUrl = bundle.getString("urlNew");
                        }
                    }
                }
            };
            IntentFilter intentFilter = new IntentFilter("UpdateUrl");
            registerReceiver(broadcastReceiver, intentFilter);

        }
    @Override
    public void onDestroy() {
        super.onDestroy();
        if(broadcastReceiver!=null){
            unregisterReceiver(broadcastReceiver);
        }
    }

    }

And where from update put following code,

Intent intent = new Intent();
intent.setAction("UpdateUrl");
intent.putExtra("urlNew", "" + newUrl);
sendBroadcast(intent);

Upvotes: 0

Anthony Barrera
Anthony Barrera

Reputation: 492

On the opPostExecute of the aynctask, you can use the result string of. The UI thread. You could also set a global variable in the class to be set with the value in onPostExecute.

@Override
public void onCreate()
{}

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
     new MyTask().execute();
     return START_STICKY;
}

private class MyTask extends AsyncTask<Void, Void, String>
{
    String textResult;

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

        URL textUrl;

        try {
            textUrl = new URL(textSource);

            BufferedReader bufferReader
                    = new BufferedReader(new InputStreamReader(textUrl.openStream()));

            String StringBuffer;
            String stringText = "";
            while ((StringBuffer = bufferReader.readLine()) != null) {
                stringText += StringBuffer;
            }
            bufferReader.close();

            textResult = stringText;
            return textResult;
        } catch (MalformedURLException e) {
            e.printStackTrace();
            textResult = e.toString();
        } catch (IOException e) {
            e.printStackTrace();
            textResult = e.toString();
        }

        return null;

    }

    @Override
    protected void onPostExecute(String result) {

        Log.d("DebugTag", "Value2: " + textResult);

        super.onPostExecute(result);

        STREAM_URL = result;

    SharedPreferences sharedPreferences = 
    PreferenceManager.getDefaultSharedPreferences(BackgroundService.this);
    String radio = sharedPreferences.getString("station", "8000");

    if (radio != null && radio.equals("8000"))
    {
        STREAM_URL = "http://178.149.88.126:8000/";
    }
    if (radio != null && radio.equals("8010"))
    {
        STREAM_URL = "http://178.149.88.126:8010/";
    }
    if (radio != null && radio.equals("8020"))
    {
        STREAM_URL = "http://178.149.88.126:8020/";
    }
    if (radio != null && radio.equals("8030"))
    {
        STREAM_URL = "http://178.149.88.126:8030/";
    }

    mediaPlayer = new MediaPlayer();
    try
    {
        mediaPlayer.setDataSource(STREAM_URL);
    } catch (IOException e)
    {
        e.printStackTrace();
    }

    mediaPlayer.setOnCompletionListener(BackgroundService.this);
    }
}

Upvotes: 1

Related Questions