2012-03-28 3 views
0

В моем проекте я использую код тревоги. Нет ошибки, но ничего в классе BroadcastReceiver не выполняется. Я не понимаю, где виновата. Im делает это в Windows, используя Eclipse. Я также указал класс <receiver> в AndroidManifest.xml.Получение сигналов тревоги в Android

Я хочу, чтобы код выполнял класс BroadcastReceiver. В этом случае я хочу, чтобы текст, указанный в классе приемника, отображался в указанное время. Это мой класс приемника:

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(); 
}} 

Может кто-нибудь предложить способ избавиться от этой проблемы? Спасибо !!!

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> 

Выше мой androidmanifest.xml.This код, который я использовал для trigerring приемника.

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

, пожалуйста, показать AndroidManifest.xml – ccheneson

+1

Возможно, вы захотите опубликовать код, который, по вашему мнению, должен запускать приемник. –

+0

Я включил свой андроид манифест и код для запуска тревоги в моем сообщении ... – Kiruthika

ответ

2

Глядя только на этот кусочек кода, ответить непросто. Однако, скорее всего, вы не указали фильтр намерений для получателя в манифесте.

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

Активности или служба, с помощью будильника, когда «время истекло» должен отправить Intent соответствующего действие, указанное в андроиде манифеста. Вы должны сделать что-то вроде этого:

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

Надеюсь, это поможет.

Cheers

+0

Спасибо за ответ! Я включил файл манифеста и код для запуска тревоги в своем сообщении. Я использовал <фильтр намерения>. Но где я должен включать второй фрагмент кода, который вы опубликовали? Im, новый для android.Pls, помогает мне ... – Kiruthika

+0

@Kiruthika: В вашем 'startAlert' заменить« Intent intent = new Intent (this, MyBroadcastReceiver.class) »с' Intent target = new Intent ("xyz.abc.YOUR_ACTION"); ' – ccheneson

+0

@ccheneson: ok Я понимаю ... Спасибо! – Kiruthika

0

Я думаю, что проблема в файле манифеста.

Попробуйте удалить этот параметр "android: process =": ​​remote "из вашего приемника.

EDIT: Пожалуйста, см. Мой код ниже, это отлично работает. Надеюсь, это поможет.

// 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

Спасибо! Я попробовал это. Но не работает ... – Kiruthika

+0

: Спасибо вам большое! Он отлично работает ... – Kiruthika

0

Сначала попробуйте добавить период в файл манифеста перед MyBroadcastReceiver. Он должен выглядеть так: android: name = ". MyBroadcastReceiver".

Если это не сработает (хотя, надеюсь, оно и есть), попробуйте добавить «Контекст». Перед ALARM_SERVICE на этой линии:

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 

так это будет выглядеть:

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

В противном случае, я ничего не сразу видно видеть.

+0

Ya thats правый! Это одна из ошибок, которые я сделал. Спасибо, что заметили ... – Kiruthika

0

Этот код работает отлично:

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); 
} 

и в androidmanifest.xml Я использовал этот код:

<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> 

Спасибо всем за помощь !!!

Смежные вопросы