2013-07-30 2 views
0

Я работаю с приложением для будильника в своем приложении. Я установил будильник, используя следующий код. Если я создаю аварийный сигнал, значит его создание, но сигнал тревоги не переходит к широковещательному приемнику. Я пробовал несколько раз, но не работал для меня. Несмотря на то, что я правильно добавил широковещательный приемник в файл манифеста android.Android Broadcast Receiver

1.ЗАГРУЗКА класс Alarm:

public class Alertedit extends Activity { 

    boolean AlarmEnabled; 
    final static int RQS_1 = 1; 
    TimePicker myTimePicker; 

private SQLiteConnectornew loginDataBaseAdapter; 


     protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_alertaddlist); 

    Button bt1 = (Button) findViewById(R.id.alerttime); 

     bt1.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       openTimePickerDialog(false); 
      }});} 

      private void openTimePickerDialog(boolean is24r){ 
     Calendar calendar = Calendar.getInstance(); 

     timePickerDialog = new TimePickerDialog(
      Alertedit.this, 
      onTimeSetListener, 
      calendar.get(Calendar.HOUR_OF_DAY), 
      calendar.get(Calendar.MINUTE), 
      is24r); 
     timePickerDialog.setTitle("Set Alarm Time"); 

     timePickerDialog.show();} 

     OnTimeSetListener onTimeSetListener 
     = new OnTimeSetListener(){ 

     @Override 
     public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 

      Calendar calNow = Calendar.getInstance(); 
      Calendar calSet = (Calendar) calNow.clone(); 

      calSet.set(Calendar.HOUR_OF_DAY, hourOfDay); 
      calSet.set(Calendar.MINUTE, minute); 
      calSet.set(Calendar.SECOND, 0); 
      calSet.set(Calendar.MILLISECOND, 0); 

      if(calSet.compareTo(calNow) <= 0){ 
       //Today Set time passed, count to tomorrow 
       calSet.add(Calendar.DATE, 1); 
      } 

      setAlarm(calSet); 
     } 

     private void setAlarm(Calendar targetCal) { 
      // TODO Auto-generated method stub 
      bt1.setText("" + targetCal.getTime()); 
      Log.d("set", "Alarm set"); 
      Intent intent = new Intent(Alertedit.this, AlarmReciever.class); 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(Alertedit.this, RQS_1, intent, 0); 
      AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
      alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent); 

     }}; 

2.Receiver класс:

public class AlarmReciever extends BroadcastReceiver { 


@Override 
public void onReceive(Context context, Intent intent) { 
    try { 
     /* Display an alert */ 
     Log.e("value", "how are you??"); 
     Toast.makeText(context, "How are you?", Toast.LENGTH_LONG).show(); 
    } 
    catch (Exception r) { 
     Toast.makeText(context, "You were supposed to do something" 
       +" now but I can't retrieve what it was.", 
       Toast.LENGTH_SHORT).show(); 
     Log.e("ALARM_RECEIVER", r.toString()); 
    } 
    } 

}

3.Manifest Файл:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.contactlist" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="7" 
    android:targetSdkVersion="17" /> 
<uses-permission android:name="android.permission.INTERNET"/> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:screenOrientation="portrait" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.contactlist.Primemfrontpage" 

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

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
      <activity 
     android:name="com.example.contactlist.Login" 
     android:label="@string/app_name" > 
    </activity> 
      <activity 
     android:name="com.example.contactlist.Registration" 
     android:label="@string/app_name" > 
    </activity> 
    <activity 
     android:name="com.example.contactlistnew.Alertedit" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Translucent.NoTitleBar" > 
    </activity> 

    <receiver android:name="com.example.contactlistnew.AlarmReceiver"> 
    </receiver></application></manifest> 

ответ

0

Кажется, вы должны добавить фильтр намерений для повторного синонимов употребляются, как показано ниже

<receiver android:name="com.example.contactlistnew.AlarmReceiver"> 
    <intent-filter> 
     <action android:name="android.alarm.demo.action" /> 
    </intent-filter> 
</receiver> 
+0

На мой взгляд, сигнал посылает в эфир только тогда, когда время истекло. – Jun

+0

, вы также можете установить время, в течение которого прошло время. Если время имеет место в прошлом, будильник будет срабатывать немедленно. – Jun

0

из BroadcastReceiver должен прочитать сообщение от вашего Намерения, что-то вроде этого

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

public class MyBroadcastReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

     // Extract data included in the Intent 
     CharSequence intentData = intent.getCharSequenceExtra("message"); 
     Toast.makeText(context, "Received the Intent's message: "+intentData, Toast.LENGTH_LONG).show(); 
    } 

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