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>
此時一切正常,當系統啓動完畢廣播接收器捕捉事件,並啓動服務,問題是現在,這服務應該將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>
我覺得現在的問題是,過去的廣播接收沒有被正確調用,因爲該通知是不創建。 有人可以幫助我嗎?
我做這在我的清單: <接收器的android:名稱= 「service.MemoPrenotazione 」> <意圖過濾器> <操作機器人:名字=「 com.mypack.service.MemoPrenotazione」/> intent-filter> 這是不正確的? – user1187793 2012-02-03 16:19:30
我看不到源文件中的包定義,它是什麼?我不認爲你需要名稱中的.service部分。名稱=「。MemoPrenotazione」和名稱=「。BootReceiver」應該工作。 – mcnicholls 2012-02-03 16:22:42
我的軟件包是:package com.mypackage.service;因此,我需要名稱中的.service部分 – user1187793 2012-02-03 16:36:50