2012-03-28 7 views
0

In meinem Projekt verwende ich Alarmcode. Es gibt keinen Fehler, aber alles innerhalb der BroadcastReceiver Klasse wird nicht ausgeführt. Ich verstehe nicht, wo der Fehler ist. Ich mache es in Windows mit Eclipse. Ich habe auch die <receiver> Klasse in AndroidManifest.xml angegeben.Empfangen von Alarmen in Android

Ich möchte den Code innerhalb der BroadcastReceiver Klasse ausgeführt werden. In diesem Fall möchte ich, dass der in der Empfängerklasse angegebene Text zur angegebenen Zeit angezeigt wird. Das ist mein Empfänger Klasse:

public class MyBroadcastReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    context.registerReceiver(null, null); 
    Toast.makeText(context, "Time is 
up!!!!.",Toast.LENGTH_LONG).show(); 
}} 

Kann jemand einen Weg vorschlagen, loszuwerden dieses Problem zu umgehen? Danke !!!

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest 
xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.project.rappel" 
android:versionCode="1" 
android:versionName="1.0"> 
<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name"> 
    <provider 
     android:name="ScheduleProvider" 
     android:authorities="com.project.rappel" /> 
    <activity 
     android:name=".Rappel" 
     android:label="@string/app_name"> 
     <intent-filter> 
      <action 
       android:name="android.intent.action.MAIN" /> 
      <category 
       android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name=".SetSchedule"></activity> 
    <activity 
     android:name=".DaysAndTimes"></activity> 
    <activity 
     android:name=".Tts"></activity> 

    <receiver 
     android:name="MyBroadcastReceiver" 
     android:process=":remote" /> 
    </application> 
    <uses-sdk 
    android:minSdkVersion="8" /> 

    </manifest> 

Oben ist mein androidmanifest.xml.This ist der Code, den ich für trigerring Empfänger verwendet.

public void startAlert(View view) { 
    EditText text = (EditText) findViewById(R.id.time); 
    int i = Integer.parseInt(text.getText().toString()); 
    Intent intent = new Intent(this, MyBroadcastReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(
      this.getApplicationContext(), 234324243, intent, 0); 
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() 
      + (i * 1000), pendingIntent); 
    Toast.makeText(this, "Alarm set in " + i + " seconds", 
      Toast.LENGTH_LONG).show(); 
} 
+0

Bitte zeigen Sie die AndroidManifest.xml – ccheneson

+1

Sie könnten den Code, von dem Sie glauben, dass er den Empfänger auslösen sollte, veröffentlichen. –

+0

Ich habe meine Androidmanifest und Code für die Auslösung von Alarm in meinem Beitrag enthalten ... – Kiruthika

Antwort

2

Betrachtet man nur dieses Stück Code ist es nicht einfach zu beantworten. Es ist jedoch wahrscheinlich, dass Sie den Manifestfilter für den Empfänger nicht im Manifest angegeben haben.

<receiver android:name=".MyBroadcastReceiver"> 
<intent-filter> 
     <action android:name="xyz.abc.YOUR_ACTION" /> 
</intent-filter> 
</receiver> 

die Aktivität oder Dienst, der den Alarm verwendet, wenn „die Zeit abgelaufen ist“ hat eine Absicht, das in dem android manifest angegebene Aktion passend zu senden. Sie müssen etwas tun wie folgt:

Intent MyIntent = new Intent("xyz.abc.YOUR_ACTION"); 
Context cont = this.getBaseContext(); 
cont.sendBroadcast(SMSIntent); 

Hoffe, dass dies hilft.

Prost

+0

Danke für die Antwort! Ich habe Manifest-Datei und Code für die Auslösung von Alarm in meinem Beitrag enthalten.Ich habe verwendet. Aber wo sollte ich aufnehmen das zweite Code-Snippet, das du gepostet hast? Ich bin neu bei android.Pls hilf mir ... – Kiruthika

+0

@Kiruthika: Ersetze in deinem 'startAlert'' Intent intent = new Intent (this, MyBroadcastReceiver.class); 'with' Intent intent = new Intent ("xyz.abc.YOUR_ACTION"); ' – ccheneson

+0

@ccheneson: ok ich verstehe..Danke! – Kiruthika

0

ich glaube, das Problem in Manifest-Datei ist.

Versuchen Sie, diesen Parameter "android: process =": ​​remote "" von Ihrem Empfänger zu entfernen.

EDIT: Bitte, siehe meinen Code unten, es funktioniert perfekt. Hoffe, es wird helfen.

// registration 
Intent intent = new Intent(context, AlarmReceiver.class).putExtra(AlarmReceiver.ALARM_ID, alarm.getId()); 
intent.setData(Uri.parse("date:" + alarm.getId())); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); // try to change last parameter like mine 
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTime().getTime(), pendingIntent); 

// in manifest in application tag 
<receiver android:name=".ui.more.AlarmReceiver"/> 
// receiver class 
public class AlarmReceiver extends BroadcastReceiver { 
    public static final String ALARM_ID = "alarmId"; 
    public void onReceive(Context context, Intent intent) { 
    context.startActivity(new Intent(context, StartAlarmActivity.class) 
       .putExtra(StartAlarmActivity.ALARM_ID, intent.getExtras().getInt(ALARM_ID)) 
       .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); 
    } 
} 
+0

Danke! Ich habe es versucht. Aber es funktioniert nicht ... – Kiruthika

+0

: Vielen Dank !! Es funktioniert gut ... – Kiruthika

0

Versuchen Sie zuerst, einen Punkt in Ihrer Manifestdatei vor MyBroadcastReceiver hinzuzufügen. Es sollte wie folgt aussehen: android: name = ". MyBroadcastReceiver".

Wenn das nicht klappt (obwohl es hoffentlich funktioniert), versuchen Sie, 'Context' hinzuzufügen. vor ALARM_SERVICE auf dieser Linie:

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 

so würde es wie folgt aussehen:

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

Ansonsten sehe ich nicht alles sofort offensichtlich.

+0

Ja das ist richtig! Das ist einer der Fehler, die ich gemacht habe ... Danke, dass du es herausgefunden hast ... – Kiruthika

0

Dieser Code funktioniert:

public void setupAlarm() { 
    AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(this, MyAlarmReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, 
      intent, 0); 
    Calendar time = Calendar.getInstance(); 
    time.setTimeInMillis(System.currentTimeMillis()); 
    // Set Alarm for next 10 seconds 
    time.add(Calendar.SECOND, 10); 
    alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), 
      pendingIntent); 
} 

und im AndroidManifest.xml Ich habe diesen Code verwendet:

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <receiver android:name=".MyAlarmReceiver" /> 

    <activity 
     android:name=".AlarmSampleActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

Vielen Dank für die Hilfe !!!