Receptor de anuncios

uso de receptores de anuncios (Broadcast Receiver)

Servicios en Android (Receptor de anuncios)

Android fundamentals 07.3: Broadcast receivers

Ejemplo: receptor de anuncios

Ejemplo: Descargar un archivo con un servicio (IntentService) y mostrar una información (o notificación) cuando termine usando un receptor de anuncios

Añadir un switch a la interfaz de usuario para descargar usando DownloadService o DownloadIntentService.

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    public ActivityMainBinding binding;
    private static final int REQUEST_CONNECT = 1;
    public static final String WEB = "https://dam.org.es/ficheros/frases.html";
    public static final String ACTION_RESP = "RESPUESTA_DESCARGA";
    IntentFilter intentFilter;
    BroadcastReceiver broadcastReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        binding = ActivityMainBinding.inflate(getLayoutInflater());
        View view = binding.getRoot();
        setContentView(view);

        binding.botonIniciar.setOnClickListener(this);
        binding.botonParar.setOnClickListener(this);

        intentFilter = new IntentFilter(ACTION_RESP);
        intentFilter.addCategory(Intent.CATEGORY_DEFAULT);
        broadcastReceiver = new ReceptorOperacion();
        // registerReceiver(broadcastReceiver, intentFilter);
    }

    @Override
    public void onResume(){
        super.onResume();
        //---registrar el receptor ---
        registerReceiver(broadcastReceiver, intentFilter);
    }

    @Override
    public void onPause(){
        super.onPause();
        //--- anular el registro del recpetor ---
        unregisterReceiver(broadcastReceiver);
    }

    public class ReceptorOperacion extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            String respuesta = intent.getStringExtra("resultado");
            binding.salida.setText(respuesta);
            // mostrarMensaje(respuesta);
        }
    }

DownloadIntentService.java

public class DownloadIntentService extends IntentService {

    public DownloadIntentService() {
        super("DownloadIntentService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        if (intent != null) {
            String web = intent.getExtras().getString("web");
            URL url = null;
            try {
                url = new URL(web);
                descargaOkHTTP(url);
            } catch (MalformedURLException e) {
                e.printStackTrace();
                enviarRespuesta("Error en la URL: " + e.getMessage());
            }
        }
    }

    private void descargaOkHTTP(URL web) {
        final OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
                .url(web)
                .build();

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {
                Log.e("Error: ", e.getMessage());
                enviarRespuesta("Fallo: " + e.getMessage());
            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException{
                try (ResponseBody responseBody = response.body()) {
                    if (!response.isSuccessful()) {
                        //throw new IOException("Unexpected code " + response);
                        Log.e("Error: ", "Unexpected code " + response);
                        enviarRespuesta("Error: Unexpected code " + response);
                    } else {
                        // Read data on the worker thread
                        final String responseData = response.body().string();
                        enviarRespuesta("Descarga: fichero descargado OK");
                        // guardar el fichero descargado en memoria externa
                        if (escribirExterna(responseData)) {
                            Log.i("Descarga: ", "fichero descargado");
                        } else {
                            Log.e("Error ", "no se ha podido descargar");
                        }
                    }
                }
            }
        });
    }

    private void mostrarMensaje(String mensaje) {
        Toast.makeText(this,mensaje, Toast.LENGTH_SHORT).show();
    }

    private boolean escribirExterna(String cadena) {
        File miFichero, tarjeta;
        BufferedWriter bw = null;
        boolean correcto = false;
        try {
            tarjeta = Environment.getExternalStorageDirectory();
            miFichero = new File(tarjeta.getAbsolutePath(), "frases.html");
            bw = new BufferedWriter(new FileWriter(miFichero));
            bw.write(cadena);
            Log.i("Información: ", miFichero.getAbsolutePath());
            enviarRespuesta("Descarga: fichero guardado en\n" + miFichero.getAbsolutePath());
        } catch (IOException e) {
            if (cadena != null)
                Log.e("Error: ", cadena);
            Log.e("Error de E/S", e.getMessage());
            enviarRespuesta("Error: " + e.getMessage());
        } finally {
            try {
                if (bw != null) {
                    bw.close();
                    correcto = true;
                }
            } catch (IOException e) {
                Log.e("Error al cerrar", e.getMessage());
            }
        }
        return correcto;
    }

    private void enviarRespuesta (String mensaje) {
        Intent i = new Intent();
        i.setAction(MainActivity.ACTION_RESP);
        i.addCategory(Intent.CATEGORY_DEFAULT);
        i.putExtra("resultado", mensaje);
        sendBroadcast(i);
    }

}

Código del Servicio de Descarga

Deja una respuesta