GRAZIE, E BUON PRIMO MAGGIO !

Grazie ancora per la vostra assidua presenza su questo sito!
Abbiamo raggiunto le 5000 vistite totali.
Grazie per i vostri commenti/critiche che mi aiutano a migliorare.
Per non avere critiche bisogna essere nulla… (Aristotele)
Buon primo Maggio,

Andrea Bianchini.

Troppo, troppo diversi

Troppo, troppo diversi, Andrea Bianchini (2022)

Troppo, troppo diversi

-Nonno! Nonno! Stamattina è iniziato il programma LOM (Life On Mars)! Stanno bombardando Marte con acqua mista a semi dei principali tipi di piante che abbiamo sulla Terra ! Così si creerà una flora che genererà ossigeno per consentire la vita su Marte!
-Vieni Marco, vieni, siediti qui accanto a me. Queste cose erano impensabili solo venti anni fa, ma voglio raccontarti una storia, una storia che mi ha raccontato la mia maestra quando avevo la tua età.
C’era una volta non si sa dove, non si sa quando, un sistema solare con diversi pianeti ed il suo bel sole. In due di questi pianeti, Ro e Sigma, si era sviluppata la vita, ed il grado tecnologico raggiunto dalle due civiltà era pressocchè simile. Ma, le sembianze e le tecnologie di queste due civiltà erano talmente diverse che anche se due individui delle rispettive civiltà si fossero avvicinati ad un metro di distanza, neanche si sarebbero resi conto della esistenza l’uno dell’altro…
Arrivò un giorno in cui per problemi di sopravvivenza, il pianeta Ro era divenuto invivibile, questa civiltà decise di avviare un progetto per trasferirsi, guarda caso sull’altro pianeta, Sigma, già popolato. Così cominciarono ad inviare forme di vita sull’altro pianeta, Sigma, come nel tuo progetto LOM. Passò il tempo e le forme di vita inviate sul pianeta cominciarono a moltiplicarsi ed a produrre flora e fauna che iniziarono a produrre una pandemia di tali proporzioni che la civiltà vittima dell’invisibile invasione decise di avviare un progetto di popolazione del pianeta scelto come ospitale ed inabitato, guarda caso Ro. Passò il tempo ed anche il pianeta Ro cominciò a sviluppare malattie e problemi sino all’instaurarsi di una pandemia di proporzioni globali. Nessuna delle due civiltà fu in grado di estirpare la propria pandemia, in quanto troppo, troppo diverse dalle forme di vita a loro note.
E così i pianeti Ro e Sigma subirono la propria estinzione.
Le pandemie erano i nuovi abitanti dei rispettivi pianeti.

……………………………..

Too much, too different

-Grandpa! Grandpa! The LOM (Life On Mars) program started this morning! They are bombarding Mars with water mixed with seeds from the main types of plants we have on Earth! This will create a flora that will generate oxygen to allow life on Mars!
-Come Marco, come, sit here next to me. These things were unthinkable just twenty years ago, but I want to tell you a story, a story that my teacher told me when I was your age.
Once upon a time, no one knows where, no one knows when, a solar system with several planets and its beautiful sun. In two of these planets, Ro and Sigma, life had developed, and the technological level reached by the two civilizations was almost similar. But, the appearance and technologies of these two civilizations were so different that even if two individuals of their respective civilizations had approached one meter away, they would not even have realized the existence of each other …
A day came when for survival problems, the planet Ro had become unlivable, this civilization decided to start a project to move, coincidentally, to the other planet, Sigma, already populated. So they began to send life forms to the other planet, Sigma, as in your LOM project. Time passed and the forms of life sent to the planet began to multiply and to produce flora and fauna that began to produce a pandemic of such proportions that the civilization victim of the invisible invasion decided to start a population project of the planet chosen as hospitable and uninhabited, coincidentally Ro. Time passed and even the planet Ro began to develop diseases and problems until the establishment of a pandemic of global proportions. Neither civilization was able to eradicate its pandemic, as too, too different from the forms of life known to them.
And so the planets Ro and Sigma underwent their own extinction.
Pandemics were the new inhabitants of their respective planets.

Andrea Bianchini

PDF rendering in Android

Esempio di Android PdfRendererBasic
Questo esempio mostra come visualizzare un documento PDF sullo schermo usando PdfRenderer introdotto in Android 5.0 Lollipop.

introduzione
È ora possibile eseguire il rendering di pagine di documenti PDF in immagini bitmap per la stampa utilizzando la nuova classe PdfRenderer. È necessario specificare un ParcelFileDescriptor che è ricercabile (ovvero, è possibile accedere al contenuto in modo casuale) su cui il sistema scrive il contenuto stampabile. La tua app può ottenere una pagina per il rendering con openPage(), quindi chiamare render() per trasformare PdfRenderer.Page aperto in una bitmap.

Questo esempio carica il PDF dalle risorse. Il contenuto delle risorse è compresso per impostazione predefinita e la classe PdfRenderer non può aprirlo. In questo esempio, risolviamo questo problema copiando il file nella directory della cache.

Prerequisiti
SDK Android 28
Strumenti di compilazione Android v28.0.3
Archivio di supporto Android

Codice della classe principale per il rendering :

/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.android.pdfrendererbasic;

import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ViewModelProvider;

/**
 * This fragment has a big {@link ImageView} that shows PDF pages, and 2
 * {@link android.widget.Button}s to move between pages.
 */
public class PdfRendererBasicFragment extends Fragment {

    private PdfRendererBasicViewModel mViewModel;

    private final View.OnClickListener mOnClickListener = (view) -> {
        switch (view.getId()) {
            case R.id.previous:
                if (mViewModel != null) {
                    mViewModel.showPrevious();
                }
                break;
            case R.id.next:
                if (mViewModel != null) {
                    mViewModel.showNext();
                }
                break;
        }
    };

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.pdf_renderer_basic_fragment, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
        // View references.
        final ImageView image = view.findViewById(R.id.image);
        final Button buttonPrevious = view.findViewById(R.id.previous);
        final Button buttonNext = view.findViewById(R.id.next);

        // Bind data.
        mViewModel = new ViewModelProvider(this).get(PdfRendererBasicViewModel.class);
        final LifecycleOwner viewLifecycleOwner = getViewLifecycleOwner();
        mViewModel.getPageInfo().observe(viewLifecycleOwner, pageInfo -> {
            if (pageInfo == null) {
                return;
            }
            final Activity activity = getActivity();
            if (activity != null) {
                activity.setTitle(getString(R.string.app_name_with_index,
                        pageInfo.index + 1, pageInfo.count));
            }
        });
        mViewModel.getPageBitmap().observe(viewLifecycleOwner, image::setImageBitmap);
        mViewModel.getPreviousEnabled().observe(viewLifecycleOwner, buttonPrevious::setEnabled);
        mViewModel.getNextEnabled().observe(viewLifecycleOwner, buttonNext::setEnabled);

        // Bind events.
        buttonPrevious.setOnClickListener(mOnClickListener);
        buttonNext.setOnClickListener(mOnClickListener);
    }

}

Articolo integrale -> jarakiPdfRenderBasic

Interazione tra Attività ed Apps in Android

“Un Intento è un oggetto di messaggistica che puoi utilizzare per richiedere un’azione da un altro componente dell’app. Sebbene gli intenti facilitino la comunicazione tra i componenti in diversi modi, esistono tre casi d’uso fondamentali:

Avvio di un’attività
Un’attività rappresenta una singola schermata in un’app. Puoi avviare una nuova istanza di un’attività passando un intento a startActivity(). L’intento descrive l’attività da avviare e trasporta tutti i dati necessari.

Se desideri ricevere un risultato dall’attività al termine, chiama startActivityForResult(). La tua attività riceve il risultato come oggetto Intent separato nel callback onActivityResult() della tua attività. Per ulteriori informazioni, vedere la guida alle attività.

Avvio di un servizio
Un servizio è un componente che esegue operazioni in background senza un’interfaccia utente. Con Android 5.0 (livello API 21) e versioni successive, puoi avviare un servizio con JobScheduler. Per ulteriori informazioni su JobScheduler, vedere la relativa documentazione di riferimento API.

Per le versioni precedenti ad Android 5.0 (livello API 21), puoi avviare un servizio usando i metodi della classe Service. Puoi avviare un servizio per eseguire un’operazione una tantum (come il download di un file) passando un Intento a startService(). L’intento descrive il servizio da avviare e trasporta tutti i dati necessari.

Se il servizio è progettato con un’interfaccia client-server, è possibile eseguire il binding al servizio da un altro componente passando un Intent a bindService(). Per ulteriori informazioni, vedere la Guida ai servizi.

Consegnare una trasmissione
Una trasmissione è un messaggio che qualsiasi app può ricevere. Il sistema fornisce varie trasmissioni per eventi di sistema, ad esempio quando il sistema si avvia o il dispositivo inizia a caricarsi. Puoi inviare una trasmissione ad altre app passando un Intent a sendBroadcast() o sendOrderedBroadcast().”

Esempio:

public class MainActivity extends AppCompatActivity {
    public static final String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /** Called when the user taps the Send button */
    public void sendMessage(View view) {
        Intent intent = new Intent(this, DisplayMessageActivity.class);
        EditText editText = (EditText) findViewById(R.id.editTextTextPersonName);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);
    }
}

Articolo integrale -> Intents