2012-02-03 6 views
0

に呼び出されていないすべてのあなたの助けを事前にありがとうございます、私の英語のため申し訳ありませんが、それは私の状況ですが、私はブロードキャストレシーバーを持っている:onReceiveサービス

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

public class BootReceiver extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 

      Intent serviceIntent = new Intent(); 
      serviceIntent.setAction("com.mypack.service.RicordaPrenotazione"); 
      context.startService(serviceIntent); 
    } 
} 

<receiver android:name=".service.BootReceiver"> 
    <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <category android:name="android.intent.category.HOME" /> 
    </intent-filter> 
</receiver> 

この放送受信機の起動を打ち上げ、このサービス完了したとき:この時点で

import java.util.ArrayList; 
import java.util.Calendar; 
import java.util.HashMap; 

import org.json.JSONException; 

import android.app.AlarmManager; 
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.content.SharedPreferences; 

import android.os.Bundle; 
import android.os.IBinder; 
import android.util.Log; 
import android.widget.Toast; 


public class RicordaPrenotazione extends Service { 

    public static final String PREFERENCES = "Pref"; 

    public static final String PREF_CODPAZIENTE = "codice paziente"; 
    public static final String PREF_NOME = "nome"; 
    public static final String PREF_COGNOME = "cognome"; 
    public static final String PREF_CF = "codice fiscale"; 
    public static final String PREF_TS = "tessera sanitaria"; 
    public static final String PREF_DATA = "data scadenza"; 

    private final static String LOG_TAG = "LocalService"; 

    private static final int NOTIFICATION = 1; 

    private NotificationManager notificationManager; 
    private Notification notification; 
    private PendingIntent pIntent; 
    private AlarmManager alarmManager; 
    private Calendar calendar; 

    private int notificationNumber; 

String codPaziente, nome, cognome, codiceFiscale, tesseraSanitaria, dataScadenza,response; 
String[] codicePrenotazione,name, surname, descEsame, descSpecialita, descAmbulatorio, descAvvertenza , dataAppuntamento, oraAppuntamento, statoPrenotazione; 

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 
WebService webService = new WebService(); 

    int numPrenotazioni; 
    int count; 

@Override 
    public void onCreate() { 
      super.onCreate(); 

      SharedPreferences prefs = getSharedPreferences(PREFERENCES,0); 

      codPaziente = prefs.getString(PREF_CODPAZIENTE, "NESSUN CODICE"); 
      nome = prefs.getString(PREF_NOME, "NESSUN"); 
      cognome = prefs.getString(PREF_COGNOME, "PROFILO"); 
      codiceFiscale = prefs.getString(PREF_CF, "XXXXXX00X00X000X"); 
      tesseraSanitaria = prefs.getString(PREF_TS, "00000000000000000000"); 
      dataScadenza = prefs.getString(PREF_DATA, "GG-MM-AAAA"); 

      count = 0; 

      try { 

        mylist = webService.recuperaPrenotazioni(codPaziente.trim()); 

      } catch (JSONException e) { 

        e.printStackTrace(); 
      } 
    } 

    @Override 
    public void onDestroy() { 

      super.onDestroy(); 
      Log.i(LOG_TAG, "Service Destroyed"); 
    } 


    @Override 
    public IBinder onBind(Intent arg0) { 
      // Ritorno null in quanto non si vuole permettere 
      // l'accesso al servizio da una applicazione diversa 
      return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startid) { 

      if(mylist.isEmpty()) 
      { 
        Toast.makeText(getApplicationContext(),"Nessuna prenotazione trovata!", Toast.LENGTH_LONG).show(); 
      } 
      else{ 

        numPrenotazioni = mylist.size(); 

        for(int j=0; j<numPrenotazioni; j++){        
          if(mylist.get(j).get("statoPrenotazione").toString().equals("1")){ 
            count++; 
            createAlarm(mylist.get(j).get("codicePrenotazione").toString(),mylist.get(j).get("descEsame").toString(),mylist.get(j).get("dataAppuntamento").toString(),mylist.get(j).get("oraAppuntamento").toString(),count); 

          } 
        } 

      } 

      // Solo per debugging 
      Log.i(LOG_TAG, "Service Started"); 

      return super.onStartCommand(intent, flags, startid); 
    } 

    public void createAlarm (String codicePrenotazioneA, String descEsameA, String dataAppuntamentoA, String oraAppuntamentoA, int count) 
    { 

      Calendar cal = Calendar.getInstance(); 

      String[] temp = dataAppuntamentoA.split(" "); 
      String[] temp2 = oraAppuntamentoA.split(" "); 
      String[] tempData = temp[0].split("-"); 
      String[] tempOra = temp2[1].split(":"); 

      cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(tempData[2])); 
      cal.set(Calendar.MONTH, Integer.parseInt(tempData[1])); 
      cal.set(Calendar.YEAR, Integer.parseInt(tempData[0])); 

      cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(tempOra[0])-1); 
      cal.set(Calendar.MINUTE, Integer.parseInt(tempOra[1])); 

      String ALARM_ACTION = "com.mypack.service.MemoPrenotazione"; 
      Intent alarmintent = new Intent(ALARM_ACTION); 

      alarmintent.putExtra("codPaziente",codPaziente); 
      alarmintent.putExtra("nome",nome); 
      alarmintent.putExtra("cognome",cognome); 

      alarmintent.putExtra("codicePrenotazione", codicePrenotazioneA); 
      alarmintent.putExtra("descEsame", descEsameA); 
      alarmintent.putExtra("dataAppuntamento", dataAppuntamentoA); 
      alarmintent.putExtra("oraAppuntamento", oraAppuntamentoA); 
      alarmintent.putExtra("count", count); 

      PendingIntent sender = PendingIntent.getBroadcast(getApplicationContext(), NOTIFICATION, 
      alarmintent,PendingIntent.FLAG_UPDATE_CURRENT| Intent.FILL_IN_DATA); 

      AlarmManager am = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
      am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender); 

    } 

} 

<service android:name=".service.RicordaPrenotazione"> 
     <intent-filter> 
      <action android:name="com.mypack.service.RicordaPrenotazione" /> 
     </intent-filter> 
</service> 

をブートは、放送受信機は、イベントをキャッチし、サービスを起動完了し、問題は今、この時にすべてが、okですサービスは、AlarmManagerを特定の時間に設定する必要があります通知を作成し、他の放送受信機でキャッチする必要がありますpendingintentを起動し、これはコードです:

import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

import android.os.Bundle; 
import android.util.Log; 

public class MemoPrenotazione extends BroadcastReceiver { 

    public static int NOTIFICATION_ID = 1; 

    String title, note, codPaziente, nome, cognome; 
    String codicePrenotazione, descEsame, dataAppuntamento, oraAppuntamento; 
    int count; 

    private NotificationManager manger; 
    private Notification notification; 
    private PendingIntent contentIntent; 


    @Override 
    public void onReceive(Context context, Intent intent) { 

      Bundle extras = intent.getExtras(); 

      codPaziente = extras.getString("codPaziente"); 
      nome = extras.getString("nome"); 
      cognome = extras.getString("cognome"); 

      codicePrenotazione = extras.getString("codicePrenotazione"); 
      descEsame = extras.getString("descEsame"); 
      dataAppuntamento = extras.getString("dataAppuntamento"); 
      oraAppuntamento = extras.getString("oraAppuntamento"); 
      count = extras.getInt("count"); 

      title = "Memo Prenotazione"; 
      note = descEsame + " il " + dataAppuntamento + " alle " 
          + oraAppuntamento; 

      manger = (NotificationManager) context 
          .getSystemService(Context.NOTIFICATION_SERVICE); 

      int icon = R.drawable.icon; 
      CharSequence tickerText = "Memo prenotazione"; 
      long when = System.currentTimeMillis(); 

      notification = new Notification(icon, tickerText, when); 

      Intent i = new Intent(context, HttpGetTaskActivity.class); 
      Bundle b = new Bundle(); 

      b.putString("codPaziente", codPaziente); 
      b.putString("nome", nome); 
      b.putString("cognome", cognome); 

      i.putExtras(b); 

      contentIntent = PendingIntent.getActivity(context, NOTIFICATION_ID, i, 
          PendingIntent.FLAG_UPDATE_CURRENT); 

      notification.setLatestEventInfo(context, title, note, contentIntent); 

      notification.flags |= Notification.FLAG_AUTO_CANCEL; 

      notification.defaults |= Notification.DEFAULT_SOUND; // Suona 
      notification.defaults |= Notification.DEFAULT_LIGHTS; // LED 
      notification.defaults |= Notification.DEFAULT_VIBRATE; // Vibra 

      manger.notify(NOTIFICATION_ID, notification); 

    } 
} 

<receiver android:name=".service.MemoPrenotazione"> 
    <intent-filter> 
     <action android:name="com.mypack.service.MemoPrenotazione" /> 
    </intent-filter> 
</receiver> 

私は問題は通知がないので、最後の放送受信が正常に呼び出されていないということだと思い作成した。 誰かが私を助けることができますか?

答えて

0

AndroidManifest.xmlでMemoPrenotazioneをBroadcastReceiverとして宣言する必要があります。

追加する内容を確認するには、hereを確認してください。

EDIT:createAlarmで

ではなく、次の操作を行います。

Intent alarmIntent = new Intent(context, MemoPrenotazione.class); 

これは、明示的にあなたのクラスへのブロードキャストを指示します。

これはまた、あなたがこのようにマニフェストを指定することができます意味:あなたは今、あなたが明示的に放送を指示されているフィルタを必要としないよう

<receiver android:name=".service.MemoPrenotazione" /> 

+0

私は私のマニフェストに次の操作を行います。 <受信機アンドロイド:名= "service.MemoPrenotazione "> <意図-フィルタ> <アクションアンドロイド:名=" com.mypack.service.MemoPrenotazioneが" /> 正しくないですか? – user1187793

+0

ソースファイル内のパッケージ定義が表示されません。名前に.service部分が必要ないとは思わない。 name = "。MemoPrenotazione"とname = "。BootReceiver"が動作するはずです。 – mcnicholls

+0

私のパッケージは:package com.mypackage.service;この理由のために私は名前の.service部分を必要とします – user1187793

関連する問題