Autore Topic: Problema BroadCastreceiver  (Letto 843 volte)

Offline deb9

  • Nuovo arrivato
  • *
  • Post: 48
  • Respect: +1
    • Mostra profilo
Problema BroadCastreceiver
« il: 13 Settembre 2013, 12:38:52 CEST »
0
Salve a tutti allora io devo mandare una notifica in base all'orario decido dall' utente imposto tutto quanto e attraverso un broadcastreceiver e un Service mando la notifica. Il tutto funziona ma se imposto l'ora e poi spengo il cellulare lo riaccendo e aspetto la notifica all'orario imposto la notifica non arriva non so dove sbattere la Testa. Ho visto il log l'unica cosa strana e data dall' Applicazione Notification Center e mi dice che ha cancellato una notifica ma non riesco a venirne fuori.
Classe Mainactivity:
Codice (Java): [Seleziona]
public class MainActivity extends Activity {
        TimePicker timePicker;
        DatePicker datePicker;
        Button ButtonSet;
        AlarmManager alarmManager;
        Calendar calendario;
        private PendingIntent pendingIntent;
        ToggleButton SetnotificationButton;

        @Override
        public void onCreate(Bundle savedInstanceState) {

                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                inizializza();

                SetnotificationButton.setOnClickListener(new OnClickListener() {
                       
                        private Object Intent;

                        @Override
                        public void onClick(View v) {
                                // TODO Auto-generated method stub
                                if (SetnotificationButton.isChecked() == true ){
                                        ButtonSet.setOnClickListener(new OnClickListener() {
                                               
                                                @Override
                                                public void onClick(View v) {
                                                        setCalendario();
                                                      Intent myIntent = new Intent(MainActivity.this, MyReceiver.class);
                                                      pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent,PendingIntent.FLAG_CANCEL_CURRENT);
                                                      alarmManager.set(AlarmManager.RTC_WAKEUP, calendario.getTimeInMillis(), pendingIntent);
                                                }
                                        });
                                }else {
                                        Toast.makeText(getApplicationContext(), "Notifica disattivata", 2000).show();
                                        ButtonSet.setOnClickListener(new OnClickListener() {
                                                @Override
                                                public void onClick(View v) {
                                                        Toast.makeText(getApplicationContext(), "Notifica disattivata", 2000).show();
                                                }
                                        });
                                }
                        }
                });
        } // end onCreate
}
Classe MyReceiver
Codice (Java): [Seleziona]
package com.example.changetime;

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

public class MyReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
               
                Intent service1 = new Intent(context, MyAlarmService.class);
                context.startService(service1);
                   Log.i("com.example.changetime.MyAlarmService", "Notifica_Partita");
        }
}
classe MyAlarmservice
Codice (Java): [Seleziona]
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.support.v4.app.NotificationCompat;
import android.util.Log;

public class MyAlarmService extends Service
{
   
    @Override
    public IBinder onBind(Intent arg0)
    {
       // TODO Auto-generated method stub
        return null;
    }
 
    @Override
    public void onCreate()
    {
       // TODO Auto-generated method stub  
       super.onCreate();
    }

   @Override
   public void onStart(Intent intent, int startId)
   {
//      
//       mManager = (NotificationManager) this.getApplicationContext().getSystemService(this.getApplicationContext().NOTIFICATION_SERVICE);
//       Intent intent1 = new Intent(this.getApplicationContext(),MainActivity.class);
//    
//       Notification notification = new Notification(R.drawable.ic_launcher,"This is a test message!", System.currentTimeMillis());
//       intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP| Intent.FLAG_ACTIVITY_CLEAR_TOP);
//
//       PendingIntent pendingNotificationIntent = PendingIntent.getActivity( this.getApplicationContext(),0, intent1,PendingIntent.FLAG_UPDATE_CURRENT);
//       notification.flags |= Notification.FLAG_AUTO_CANCEL;
//       notification.setLatestEventInfo(this.getApplicationContext(), "AlarmManagerDemo", "This is a test message!", pendingNotificationIntent);
//
//       mManager.notify(0, notification);
           Log.i("com.example.changetime.MyAlarmService", "Notifica");
           NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
           NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(
                                MyAlarmService.this);
                notificationBuilder.setContentTitle("Scadenza");
                notificationBuilder.setContentText("Il farmaco sta scadendo");
                // Testo che compare nella barra di stato non appena compare la notifica
                notificationBuilder.setTicker("Scadenza");
                // Data e ora della notifica
                notificationBuilder.setWhen(System.currentTimeMillis());
                // Icona della notifica
                notificationBuilder.setSmallIcon(R.drawable.ic_launcher);
                // autocancellazione
                notificationBuilder.setAutoCancel(true);
                // Creiamo il pending intent che verrà lanciato quando la notifica
                // viene premuta
                Intent notificationIntent = new Intent(this, MainActivity.class);
                PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
                                notificationIntent, 0);
                notificationBuilder.setContentIntent(contentIntent);
                mNotificationManager.notify(1,
                                notificationBuilder.build());
                 notificationBuilder.setDefaults(Notification.DEFAULT_SOUND
                | Notification.DEFAULT_LIGHTS );
    }
 
    @Override
    public void onDestroy()
    {
        // TODO Auto-generated method stub
        super.onDestroy();
    }
 
}
Android Manifest
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.changetime"
   android:versionCode="1"
   android:versionName="1.0" >

    <uses-sdk
       android:minSdkVersion="8"
       android:targetSdkVersion="17" />

    <application
       android:allowBackup="true"
       android:icon="@drawable/ic_launcher"
       android:label="@string/app_name"
       android:theme="@style/AppTheme" >
        <activity
           android:name="com.example.changetime.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="com.example.changetime.MyAlarmService" />

        <receiver android:name="com.example.changetime.MyReceiver"/>
    </application>

</manifest>
Tutto quello che serve è qua ma ha me non viene ho visto anche il tutorial [Facile] Broadcast Receiver - Android Developers Italia

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema BroadCastreceiver
« Risposta #1 il: 13 Settembre 2013, 12:57:34 CEST »
0
Se riavvi il telefono tutto quello che imposti con l'AlarmManager si perde. Devi intercettare il boot del telefono e reimpostare tutti i timer. Se cerchi sul forum dovresti trovare qualche discussione a riguardo.

Offline deb9

  • Nuovo arrivato
  • *
  • Post: 48
  • Respect: +1
    • Mostra profilo
Re:Problema BroadCastreceiver
« Risposta #2 il: 13 Settembre 2013, 13:18:01 CEST »
0
scusami sono nuovo :( ma come faccio a intercettare il boot e reimpostare i timer?? io ero convinto che bastava un service per questo !

Offline crbin1

  • Utente junior
  • **
  • Post: 61
  • Respect: +6
    • labeltodo
    • Mostra profilo
    • Do Androids Dream of Electric Sheep?
  • Dispositivo Android:
    Galaxy Nexus
Re:Problema BroadCastreceiver
« Risposta #3 il: 13 Settembre 2013, 13:58:06 CEST »
0
Nel manifest ti serve aggiungere il permesso RECEIVE_BOOT_COMPLETED e un receiver
Codice: [Seleziona]
       
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

<receiver android:name="com.you.project.BroadcastReceiverBoot" android:enabled="true" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
     <intent-filter>
          <action android:name="android.intent.action.BOOT_COMPLETED"/>
          <category android:name="android.intent.category.DEFAULT" />
     </intent-filter>
</receiver>       

E poi usi quel receiver per intercettare l'avvio e reimpostare la notifica

Offline deb9

  • Nuovo arrivato
  • *
  • Post: 48
  • Respect: +1
    • Mostra profilo
Re:Problema BroadCastreceiver
« Risposta #4 il: 13 Settembre 2013, 14:22:14 CEST »
0
ok ci sono per recuperare l'avvio l'ultimo dubbio e come reimpostare il timer non so come ripescare i dati :(

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema BroadCastreceiver
« Risposta #5 il: 13 Settembre 2013, 14:26:52 CEST »
0
ok ci sono per recuperare l'avvio l'ultimo dubbio e come reimpostare il timer non so come ripescare i dati :(


Devi salvarteli da qualche parte (Shared preferences, database Sqlite, ...).

Offline deb9

  • Nuovo arrivato
  • *
  • Post: 48
  • Respect: +1
    • Mostra profilo
Re:Problema BroadCastreceiver
« Risposta #6 il: 16 Settembre 2013, 11:53:31 CEST »
0
caio a tutti ho salvato le preferenze e adesso devo reimpostare il timer facendo il tempo salvato - System.getcurrentTime per avere il timer reimpostato il problema è che non so come fare quest'operazione al riavvio :(