Autore Topic: Autostart App al riavvio  (Letto 359 volte)

Offline rconsalvi

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG Galaxy S6 Edge Plus
  • Sistema operativo:
    Windows 10
Autostart App al riavvio
« il: 15 Marzo 2018, 14:41:55 CET »
0
Nulla da fare. Ho letto centinaia di pagine sull'argomento, tutte concordanti su come affrontare la questione ma a me non funziona.
Devo avviare la mia app al boot dello smartphone.

Tutti sono concordi nell'usare un broadcast receiver che avvia la MainActivity previa registrazione nel Manifest dei permessi... in pratica io ho scritto questo:

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.google.play"
    android:versionCode="1"
    android:versionName="1.0">
    ....
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    ....
   <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@drawable/logo"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver
            android:enabled="true"
            android:exported="true"
            android:name=".MyBootReceiver"
            android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.QUICKBOOT_POWERON" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>
        .....
   </application>
.....
</manifest>


Il BroadcastReceiver MyBootReceiver

package com.google.play;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyBootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            Intent i = new Intent(context, MainActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
    }

}

E poi ovviamente la MainActivity.class che svolge le funzioni principali dell'app.

Se installo l'app, funziona tutto perfettamente ma, al reboot del telefono, il BroadcastReceiver tenta di lanciare la MainActivity ma va in crash con l'errore Logcat:

03-15 12:07:29.611 10596-10596/com.google.play E/AndroidRuntime: FATAL EXCEPTION: main
                                                                 Process: com.google.play, PID: 10596
                                                                 java.lang.RuntimeException: Unable to start receiver com.google.play.MyBootReceiver: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.google.play/com.google.play.MainActivity}; have you declared this activity in your AndroidManifest.xml?
                                                                     at android.app.ActivityThread.handleReceiver(ActivityThread.java:3313)
                                                                     at android.app.ActivityThread.-wrap20(ActivityThread.java)
                                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1719)
                                                                     at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                     at android.os.Looper.loop(Looper.java:154)
                                                                     at android.app.ActivityThread.main(ActivityThread.java:6692)
                                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
                                                                  Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.google.play/com.google.play.MainActivity}; have you declared this activity in your AndroidManifest.xml?
                                                                     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1815)
                                                                     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1531)
                                                                     at android.app.ContextImpl.startActivity(ContextImpl.java:820)
                                                                     at android.app.ContextImpl.startActivity(ContextImpl.java:797)
                                                                     at android.content.ContextWrapper.startActivity(ContextWrapper.java:386)
                                                                     at android.content.ContextWrapper.startActivity(ContextWrapper.java:386)
                                                                     at com.google.play.MyBootReceiver.onReceive(MyBootReceiver.java:14)
                                                                     at android.app.ActivityThread.handleReceiver(ActivityThread.java:3306)
                                                                     at android.app.ActivityThread.-wrap20(ActivityThread.java) 
                                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1719) 
                                                                     at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                     at android.os.Looper.loop(Looper.java:154) 
                                                                     at android.app.ActivityThread.main(ActivityThread.java:6692) 
                                                                     at java.lang.reflect.Method.invoke(Native Method) 
                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) 
                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) 



... come se la MainActivity non esistesse!

Ho provato anche a creare un'activity dummy di supporto (MyActivity.class) che ha la sola funzione di richiamare la MainActivity, e ho indicato al BroadcastReceiver di avviare quella... ma nulla... anche così l'app crasha e mi restituisce l'errore di Activity not found stavolta sulla MyActivity.class.

Non capisco.

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 835
  • Respect: +182
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Autostart App al riavvio
« Risposta #1 il: 20 Marzo 2018, 10:01:55 CET »
0
Metti qui:

Codice (XML): [Seleziona]
<activity android:name=".MainActivity">
Il namespace completo di MainActivity al posto di .MainActivity, es:


Codice (XML): [Seleziona]
<activity android:name="it.miodominio.miaapp.MainActivity">
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline rconsalvi

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG Galaxy S6 Edge Plus
  • Sistema operativo:
    Windows 10
Re:Autostart App al riavvio
« Risposta #2 il: 21 Marzo 2018, 14:34:28 CET »
0
UPDATE:
Il consiglio di Ohmnibus purtroppo l'avevo già provato ma non risolve il problema.

Tuttavia, ho finalmente trovato chi causa il problema!

Tre linee di codice nella MainActivity mi consentono di nascondere l'icona dell'App dal Drawer:

                // Nasconde l'APP dal drawer
                PackageManager p = getPackageManager();
                ComponentName componentName = new ComponentName(this, MainActivity.class);
                p.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);


La terza riga (l'istruzione vera e propria) genera l'errore di activity non trovata al reboot del telefono.

Qualche suggerimento per nascondere l'app dal drawer senza che ciò comporti questo errore?

   

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 835
  • Respect: +182
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Autostart App al riavvio
« Risposta #3 il: 21 Marzo 2018, 16:32:55 CET »
0
Per nascondere l'app dal drawer dovrebbe bastare togliere

Codice (XML): [Seleziona]
<category android:name="android.intent.category.LAUNCHER" />
dal manifest
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline rconsalvi

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG Galaxy S6 Edge Plus
  • Sistema operativo:
    Windows 10
Re:Autostart App al riavvio
« Risposta #4 il: 21 Marzo 2018, 16:41:45 CET »
0
Se tolgo la riga della categoria                 
<category android:name="android.intent.category.LAUNCHER" />
mi da l'errore
Default Activity not found