Autore Topic: Lanciare app quando lo screen è spento  (Letto 583 volte)

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Lanciare app quando lo screen è spento
« il: 17 Agosto 2014, 15:17:00 CEST »
0
Ciao a tutti,
sto incontrando delle difficoltà nel lanciare una mia app quando lo schermo è bloccato.
Nel mio BroadcastReceiver
Codice: [Seleziona]
theIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
nell'activity
Codice: [Seleziona]
KeyguardManager mKeyGuardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
     KeyguardLock mLock = mKeyGuardManager.newKeyguardLock("activity_main");
      mLock.disableKeyguard();
ma l'app non viene mostrata
« Ultima modifica: 17 Agosto 2014, 16:11:29 CEST da x69asterix2 »

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Lanciare app quando lo screen è spento
« Risposta #1 il: 17 Agosto 2014, 16:40:07 CEST »
0
Io ho un codice uguale. Devo avviare un activity quando spengo lo schermo.

Creati un receiver:
Codice (Java): [Seleziona]
public class LockScreenReceiver extends BroadcastReceiver {

    private static final String TAG = "service_lock_screen";
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG,"onReceive");

        Intent i = new Intent();
        i.setClassName("com.blablabla.nonloso","com.blablabla.nonloso.NomeActivity");
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        context.startActivity(i);
    }
}

Non registrarlo nel manifest, non funzionerà se registrato in maniera statica.

Ora crea un Service e dentro dichiari il campo:  private LockScreenReceiver lockScreenReceiver = new LockScreenReceiver();
(prima ti postato il codice).

Ora nel onStartCommand del service (o dove ritieni opportuno) fai:  registerReceiver(lockScreenReceiver, new IntentFilter(Intent.ACTION_SCREEN_OFF));
Nel onDestroy del service fai anche:  unregisterReceiver(lockScreenReceiver);

Sinceramente questa parte del unregistered non ce l'avevo nemmeno io, mi è venuto in mente adesso, poichè se registri il tuo receiver dinamicamente, esso ha senso solo se l'app o service o altro è attiva. Quando terminata, non funziona più. Comunque tu fallo.

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:Lanciare app quando lo screen è spento
« Risposta #2 il: 18 Agosto 2014, 15:43:06 CEST »
0
Ciao tonno16,
Son entrato in confusione!
mi stai dicendo di crearmi oltre al mio BroadcastReceiver esistente uno nuovo BroadcastReceiver e cancellarlo dal manifest?

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Lanciare app quando lo screen è spento
« Risposta #3 il: 18 Agosto 2014, 15:46:42 CEST »
0
Un receiver dinamico (no manifest).
Ti basta

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:Lanciare app quando lo screen è spento
« Risposta #4 il: 18 Agosto 2014, 16:02:15 CEST »
0
Invece il Service lo lascio nel manifest?
Codice: [Seleziona]
<service
            android:name=".ServiceScreen"
            android:enabled="true"
            android:exported="true" >
        </service>
Per quantyo riguarda:
Codice: [Seleziona]
i.setClassName("com.notifica.LockScreenReceiver","com.notifica.ShowPopUp");tra virgolette?

Post unito: [time]18 Agosto 2014, 16:50:24 CEST[/time]
scusami tanto ma il service come fa a partire?
da ShowPopUp
Codice: [Seleziona]
   ServiceScreen svr= new ServiceScreen();
        svr.onCreate()
« Ultima modifica: 18 Agosto 2014, 16:53:27 CEST da x69asterix2 »

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Lanciare app quando lo screen è spento
« Risposta #5 il: 18 Agosto 2014, 17:01:18 CEST »
0
Il service nel maniest si.
La scritta con le virgolette
Avvi con contex.startService ()

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:Lanciare app quando lo screen è spento
« Risposta #6 il: 18 Agosto 2014, 19:36:00 CEST »
0
Sicuramente sbaglio qualcosa, ma non mi fa quello che voglio:
Questo è il Service
Codice: [Seleziona]
public class ServiceScreen extends Service {
    private LockScreenReceiver lockScreenReceiver = new LockScreenReceiver();

    public ServiceScreen() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public void onCreate() {
        Toast.makeText(this, "The new Service was Created", Toast.LENGTH_LONG).show();


    }

    @Override
    public void onStart(Intent intent, int startId) {
        // For time consuming an long tasks you can launch a new thread here...
        Toast.makeText(this, " Service Started", Toast.LENGTH_LONG).show();
        registerReceiver(lockScreenReceiver, new IntentFilter(Intent.ACTION_SCREEN_OFF));

    }

    @Override
    public void onDestroy() {
        Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
        unregisterReceiver(lockScreenReceiver);


    }
}


questo è il nuovo BroadcastReceiver
Codice: [Seleziona]
public class LockScreenReceiver extends BroadcastReceiver {

    private static final String TAG = "service_lock_screen";
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "onReceive");

        Intent i = new Intent();
        i.setClassName(context,"com.notifica.ShowPopUp");
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);

    }
}


e questo è nell' activity
Codice: [Seleziona]
startService(new Intent(this, ServiceScreen.class));

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Lanciare app quando lo screen è spento
« Risposta #7 il: 18 Agosto 2014, 20:12:18 CEST »
0
Nel service usa onStartCommand(). onStart() è deprecato.

Metti return start stiky in tale metodo.

Detto questo io ho delle classi uguali e mi funziona tutto

Post unito: [time]18 Agosto 2014, 20:15:35 CEST[/time]
ShoPopUp è il nome di un acticy? Deve esserlo.

Quel context nel receiver io non ce l' ho. Ho proprio il nome del package...quindi doppie virgolette

Post unito: 18 Agosto 2014, 20:47:38 CEST
Quello che ho fatto io: https://bitbucket.org/diego_tonini/lockscreen
« Ultima modifica: 18 Agosto 2014, 20:47:38 CEST da tonno16, Reason: Merged DoublePost »

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:Lanciare app quando lo screen è spento
« Risposta #8 il: 19 Agosto 2014, 12:00:06 CEST »
0
Purtroppo niente da fare, bisogna aggiungere qualche permesso speciale nel manifest?
 

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Lanciare app quando lo screen è spento
« Risposta #9 il: 19 Agosto 2014, 12:11:29 CEST »
0
T ho postato un link a bitbucket. Quel progetto è mio e funziona. Guardatelo

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:Lanciare app quando lo screen è spento
« Risposta #10 il: 19 Agosto 2014, 12:54:00 CEST »
0
allora adesso è ok,
però alla seconda richiesta non sblocca lo screen.
Io ho messo nell'activity onResume

 startService(new Intent(this,ServiceScreen.class));

e in onPause

  stopService(new Intent(this,ServiceScreen.class));


Codice: [Seleziona]
08-19 10:55:29.934    2539-2548/com.notifica A/PowerManager﹕ WakeLock finalized while still held: INFO
08-19 10:55:30.024    2539-2548/com.notifica E/System﹕ Uncaught exception thrown by finalizer
08-19 10:55:30.296    2539-2548/com.notifica E/System﹕ java.lang.IllegalStateException: Binder has been finalized!
            at android.os.BinderProxy.transact(Native Method)
            at android.os.IPowerManager$Stub$Proxy.releaseWakeLock(IPowerManager.java:286)
            at android.os.PowerManager$WakeLock.finalize(PowerManager.java:651)
            at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:187)
            at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:170)
            at java.lang.Thread.run(Thread.java:856)
« Ultima modifica: 19 Agosto 2014, 12:57:32 CEST da x69asterix2 »

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Lanciare app quando lo screen è spento
« Risposta #11 il: 19 Agosto 2014, 13:39:11 CEST »
0
Lanciare un activity allo sbocco e togliere lo sblocco di default sono due cose diverse.

Quando parli di sbloccare lo schermo devi mettere i permessi per wake lock. Ma il link che ti ho postato non prevede questo.

Nel mio esempio io ho un receiver che sente lo spegnimento dello schermo. Li viene avviata ' activity. ..cosi allo sblocco è già li.

Detto questo non so come altro aiutarti....

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:Lanciare app quando lo screen è spento
« Risposta #12 il: 19 Agosto 2014, 16:32:41 CEST »
0
ok!!!
credo di avere sistemato tutto!
nei miei test fino ad ora sembra che non ci sia alcuna anomalia :D

**Correggo il tiro il suo lavoro lo fà però, ho notato che lo screen del dispositivo resta sbloccato
invece dovrei bloccarlo alla chiusura dell' app.
« Ultima modifica: 19 Agosto 2014, 16:39:28 CEST da x69asterix2 »

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Lanciare app quando lo screen è spento
« Risposta #13 il: 19 Agosto 2014, 17:37:59 CEST »
0
Guardati "amministratori dispositivo"