Autore Topic: Il Service non si avvia automaticamente all'accensione del telefono  (Letto 615 volte)

adcarng73

  • Visitatore
Il Service non si avvia automaticamente all'accensione del telefono
« il: 24 Settembre 2013, 13:10:49 CEST »
0
Salve!
nella mia app, avveri bisogno di avviare un service all'accensione del telefono ,

questo e il mio Service che non fa altro che una sola notifica

Codice (Java): [Seleziona]
package com.example.boot;

import java.util.Random;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;


public class StartAtBootService extends Service {
        /*
         * Tag del Log
         */

        private final static String LOG_TAG = "MyLocalService";
       
       
       
        /*
         * Identifciatori delle notifiche
         */

        private final static int SIMPLE_NOTIFICATION_ID = 1;
        /*
         * Riferimento al NotificationManager
         */

        private NotificationManager notificationManager;       
        /*
         * Riferimento al Thread in background
         */

        private BackgroundThread backgroundThread;
       
        /*
         * Notifica da inviare piu' volte
         */

        private Notification notification;
        /*
         * Intent della Notification
         */

        private PendingIntent pIntent;
       
        /*
         * Numero di notifiche inviate
         */

        private int notificationNumber;
       
        @SuppressWarnings("deprecation")
        @Override
        public void onCreate() {
                super.onCreate();
                // Facciamo partire il BackgroundThread
                backgroundThread = new BackgroundThread();
                backgroundThread.start();
                // Otteniamo il riferimento al NotificationManager
                notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                Log.i(LOG_TAG, "Service Created");
                // Creiamo la Notification
                notification = new Notification(R.drawable.ic_launcher,
                                "Simple Notification", System.currentTimeMillis());            
                notification.flags |= Notification.FLAG_AUTO_CANCEL;
                // Impostiamo le altre informazioni tra cui l'Intent
                Intent intent = new Intent(this, NotificationActivity.class);
                intent.putExtra("notificationType", "Simple Notification");
                pIntent = PendingIntent.getActivity(this, 0, intent,
                                PendingIntent.FLAG_UPDATE_CURRENT);    
        }
       
       

        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
                // Solo per debugging
                Log.i(LOG_TAG, "Service Started");
                // Inizializziamo il numero di notifiche inviate
                notificationNumber = 0;
                return super.onStartCommand(intent, flags, startId);
        }



        @Override
        public void onDestroy() {
                backgroundThread.running = false;
                super.onDestroy();
                Log.i(LOG_TAG, "Service Destroyed");
        }

        /* (non-Javadoc)
         * @see android.app.Service#onBind(android.content.Intent)
         */

        @Override
        public IBinder onBind(Intent arg0) {
                // Ritorniamo null in quanto non si vuole permettere
                // l'accesso al servizio da una applicazione diversa
                return null;
        }
       
        @SuppressWarnings("deprecation")
        public void sendNotification() {
                // Aggiorniamo il contatore
                notificationNumber++;
                notification.number=notificationNumber;
                notification.setLatestEventInfo(this, "Simple Notification",
                                "Simple Notification Extended", pIntent);
                // La lanciamo attraverso il Notification Manager
                notificationManager.notify(SIMPLE_NOTIFICATION_ID, notification);
        }      
       
        private final class BackgroundThread extends Thread {
               
                public boolean running= true;

                public void run() {
                        Log.i(LOG_TAG, "BackgroundThread Started");                                            
                        //while(running ){                                                                                             
                                sendNotification();
                        //}
                        // Al termine del metodo run terminiamo il servizio
                        stopSelf();
                }

        }
       

}


Questo   Broadcast Receiver;
Codice (Java): [Seleziona]
package com.example.boot;

import java.util.Random;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;


public class StartAtBootService extends Service {
        /*
         * Tag del Log
         */

        private final static String LOG_TAG = "MyLocalService";
       
       
       
        /*
         * Identifciatori delle notifiche
         */

        private final static int SIMPLE_NOTIFICATION_ID = 1;
        /*
         * Riferimento al NotificationManager
         */

        private NotificationManager notificationManager;       
        /*
         * Riferimento al Thread in background
         */

        private BackgroundThread backgroundThread;
       
        /*
         * Notifica da inviare piu' volte
         */

        private Notification notification;
        /*
         * Intent della Notification
         */

        private PendingIntent pIntent;
       
        /*
         * Numero di notifiche inviate
         */

        private int notificationNumber;
       
        @SuppressWarnings("deprecation")
        @Override
        public void onCreate() {
                super.onCreate();
                // Facciamo partire il BackgroundThread
                backgroundThread = new BackgroundThread();
                backgroundThread.start();
                // Otteniamo il riferimento al NotificationManager
                notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                Log.i(LOG_TAG, "Service Created");
                // Creiamo la Notification
                notification = new Notification(R.drawable.ic_launcher,
                                "Simple Notification", System.currentTimeMillis());            
                notification.flags |= Notification.FLAG_AUTO_CANCEL;
                // Impostiamo le altre informazioni tra cui l'Intent
                Intent intent = new Intent(this, NotificationActivity.class);
                intent.putExtra("notificationType", "Simple Notification");
                pIntent = PendingIntent.getActivity(this, 0, intent,
                                PendingIntent.FLAG_UPDATE_CURRENT);    
        }
       
       

        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
                // Solo per debugging
                Log.i(LOG_TAG, "Service Started");
                // Inizializziamo il numero di notifiche inviate
                notificationNumber = 0;
                return super.onStartCommand(intent, flags, startId);
        }



        @Override
        public void onDestroy() {
                backgroundThread.running = false;
                super.onDestroy();
                Log.i(LOG_TAG, "Service Destroyed");
        }

        /* (non-Javadoc)
         * @see android.app.Service#onBind(android.content.Intent)
         */

        @Override
        public IBinder onBind(Intent arg0) {
                // Ritorniamo null in quanto non si vuole permettere
                // l'accesso al servizio da una applicazione diversa
                return null;
        }
       
        @SuppressWarnings("deprecation")
        public void sendNotification() {
                // Aggiorniamo il contatore
                notificationNumber++;
                notification.number=notificationNumber;
                notification.setLatestEventInfo(this, "Simple Notification",
                                "Simple Notification Extended", pIntent);
                // La lanciamo attraverso il Notification Manager
                notificationManager.notify(SIMPLE_NOTIFICATION_ID, notification);
        }      
       
        private final class BackgroundThread extends Thread {
               
                public boolean running= true;

                public void run() {
                        Log.i(LOG_TAG, "BackgroundThread Started");                                            
                        //while(running ){                                                                                             
                                sendNotification();
                        //}
                        // Al termine del metodo run terminiamo il servizio
                        stopSelf();
                }

        }
       

}

e qua il mio manifest
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.boot"
   android:versionCode="1"
   android:versionName="1.0" >

    <uses-sdk
       android:minSdkVersion="8"
       android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

    <application
       android:allowBackup="true"
       android:icon="@drawable/ic_launcher"
       android:label="@string/app_name"
       android:theme="@style/AppTheme" >

        <activity
           android:name="com.example.boot.MainActivity"
           android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service android:name="StartAtBootService"></service>
       
        <receiver android:name="com.example.BootCompletedReceiver">    </receiver>
       
        <activity android:name="NotificationActivity"></activity>
    </application>

</manifest>


nella mia app se faccio partire io con un button il Service mostra la notifica mentre non la visualizza
al avvio .

Offline antoniosavolare

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    LG 4x HD
  • Sistema operativo:
    Ubuntu 11.04
Re:Il Service non si avvia automaticamente all'accensione del telefono
« Risposta #1 il: 25 Settembre 2013, 12:16:36 CEST »
0
Sbagli la dichiarazione nel manifest del receiver
Codice (XML): [Seleziona]
<receiver
           android:name=".BootCompletedReceiver"
           android:enabled="true"
           android:exported="false" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

adcarng73

  • Visitatore
Re:Il Service non si avvia automaticamente all'accensione del telefono
« Risposta #2 il: 27 Settembre 2013, 09:39:03 CEST »
0
 Si grazie adesso funziona  O:-)