Autore Topic: [Snippet] Come scrivere una estensione del DashClock  (Letto 2516 volte)

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +153
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
[Snippet] Come scrivere una estensione del DashClock
« il: 15 Febbraio 2013, 00:04:34 CET »
+4
Dashclock è un magnifico lock screen clock widget per Android 4.2+.
L'applicazione è stata rilasciata come opensource e offre diversi spunti di programmazione ad alto livello.
Inoltre sono disponibili le API per poterla facilmente estendere.

Qui sotto trovare un piccolo esempio di codice di come realizzare una Battery Extension.
Il codice è un pochino grezzo, senza troppe ambizioni, ma mostra come realizzare una estensione.



Innanzitutto creiamo la nostra classe che estende  DashClockExtension:

Codice (Java): [Seleziona]
public class BatteryExtension extends DashClockExtension {

        private static final String TAG = "BatteryExtension";

        @Override
        protected void onUpdateData(int reason) {

                IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
                Intent batteryStatus = getApplicationContext().registerReceiver(null,
                                ifilter);

                // Level
                int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);

                //health
                //int health = batteryStatus.getIntExtra(BatteryManager.EXTRA_HEALTH, -1);
                               
                // How are we charging?
                int chargePlug = batteryStatus.getIntExtra(
                                BatteryManager.EXTRA_PLUGGED, -1);
                boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
                boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
                boolean wirelessCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_WIRELESS;

                String charge = "";
                if (usbCharge)
                        charge = getString(R.string.charge_usb);
                else if (acCharge)
                        charge = getString(R.string.charge_ac);
                else if (wirelessCharge)
                        charge = getString(R.string.charge_wireless);

                // Are we charging / charged?
                int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
                boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING;
                boolean isFull = status == BatteryManager.BATTERY_STATUS_FULL;
                //boolean isDischarging = status == BatteryManager.BATTERY_STATUS_DISCHARGING;

                String charging = getString(R.string.discharging);
                if (isFull)
                        charging=getString(R.string.full);
                else if (isCharging)
                        charging = getString(R.string.charging);
               
               
               
                //String technology = batteryStatus.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY);
               
                int temperature = batteryStatus.getIntExtra(
                                BatteryManager.EXTRA_TEMPERATURE, 0);
                int voltage = batteryStatus
                                .getIntExtra(BatteryManager.EXTRA_VOLTAGE, 0);

                String umTemp=getString(R.string.celsius);
                String umMv=getString(R.string.mv);
               
                // Publish the extension data update.
                publishUpdate(new ExtensionData()
                                .visible(true)
                                .icon(R.drawable.ic_extension_battery)
                                .status("" + level + "%")
                                .expandedTitle("" + level + "% " + charging)
                                .expandedBody(
                                                charge +  " - " + temperature/10 + umTemp+" - "
                                                                + voltage+umMv));

        }
}

La classe non presenta nessuna difficoltà.
Recuperiamo le informazioni della batteria attraverso questo codice:
               
Codice (Java): [Seleziona]
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
                Intent batteryStatus = getApplicationContext().registerReceiver(null,
                                ifilter);

Elaboriamo le informazioni e creiamo un ExtensionData, l'oggetto che porterà a video i nostri dati.

Inseriamo nel Manifest questa porzione di codice:
Codice (XML): [Seleziona]
 <service
           android:name=".BatteryExtension"
           android:icon="@drawable/ic_extension_battery"
           android:label="@string/extension_title"
           android:permission="com.google.android.apps.dashclock.permission.READ_EXTENSION_DATA" >
            <intent-filter>
                <action android:name="com.google.android.apps.dashclock.Extension" />
            </intent-filter>

            <meta-data
               android:name="protocolVersion"
               android:value="1" />
            <meta-data
               android:name="description"
               android:value="@string/extension_description" />
           
        </service>

E il gioco è fatto...
Installiamo l'applicazione e possiamo da subito installare nel dashClock la nostra estensione.

Il codice completo lo potete trovare su Git Hub



Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:[Snippet] Come scrivere una estensione del DashClock
« Risposta #1 il: 15 Febbraio 2013, 09:05:26 CET »
0
Molto interessante! Devo trovare qualche idea per un estensione!  :-)
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:[Snippet] Come scrivere una estensione del DashClock
« Risposta #2 il: 15 Febbraio 2013, 09:17:56 CET »
0
postato su Google+ il link a github con tag #dashclock e taggato Roman Nurik.
Vediamo se ti fa un po di pubblicità!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia