2011-11-28 2 views
0

BroadcastReceiver를 사용하여 알람 경고를 설정하고 있는데 어떤 이유로 작동하지 않습니다.BroadcastReceiver가 데이터를 메인 클래스로 되돌려 보내지 않음

public class SimpleSleepActivity extends Activity { 
/** Called when the activity is first created. */ 

Button setAlarm, setTimer; 
int hours = 1, alarmSec = 10; 
Toast mToast; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    setAlarm = (Button) findViewById(R.id.bSetAlarm); 
    setTimer = (Button) findViewById(R.id.bSetTimer); 
    setTimer.setOnClickListener(mAlarmFromNow); 


} 

private OnClickListener mAlarmFromNow = new OnClickListener() { 
    public void onClick(View v) { 

     // When the alarm goes off, broadcast an Intent to the 
     // BroadcastReceiver. This is an Intent with an explicit class 
     // name to have a receiver instantiated and called, and then 
     // create an IntentSender to have the intent executed as a broadcast. 
     Intent intent = new Intent(SimpleSleepActivity.this, 
       AlarmFromNow.class); 
     PendingIntent sender = PendingIntent.getBroadcast(
       SimpleSleepActivity.this, 0, intent, 0); 

     // Finding the current time and setting and alarm for XX seconds 
     // from that time 
     Calendar calendar = Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     calendar.add(Calendar.SECOND, alarmSec); 

     // Scheduling the alarm 
     AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
     am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender); 

     if (mToast != null) { 
      mToast.cancel(); 
     } 
     mToast = Toast.makeText(SimpleSleepActivity.this, 
       //Show the user what they imputed 
       "The alarm will go off in " + alarmSec + " Seconds", Toast.LENGTH_LONG); 
     mToast.show(); 

    } 
}; 



} 

내 다른 클래스는 내가 10 초 후에 그 토스트 알림을하려고 할 때이

public class AlarmFromNow extends BroadcastReceiver { 

public void onReceive(Context context, Intent intent) { 
    //Display a toast after alarmSec is counted 
    Toast.makeText(context, R.string.alarm_from_now, Toast.LENGTH_LONG) 
      .show(); 
} 

}

가 표시되지 않습니다이다. 나는 그것이 작동하지 않을 것이라는 다른 이유를 생각할 수 없다. 나는 구글의 API 데모를보고 밀접하게 따라 갔다.

답변

1

가능성이 ... 시도, 그것은 매니페스트에 선언해야합니다

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

    <uses-sdk android:minSdkVersion="9" /> 
    <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 

     <!-- Your activity here --> 
     <activity android:name="SimpleSleepActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 
       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
     </activity> 

     <!-- Your Receiver here --> 
     <receiver android:name="AlarmFromNow"></receiver> 
    </application> 
</manifest> 

참고 : 나는이 코드를 사용하여 코드를 신속하게 테스트했으며 실제로 10 초 후에 토스트를 보여줍니다 ...

+0

죄송합니다. 나는 그것을 추가했다. 그러나 밖에 있었다. 감사합니다 :) – domshyra

0

나는 이것과 비슷한 것을 보았습니다. 제대로 작동하려면 Intent에 조치를 취해야했습니다. setAction()으로 전달 된 값은 중요하지 않습니다. 당신이 그것을 사용할 수 있도록하기 위해 귀하의 AndroidManifest.xml 에 방송 수신기를 추가하는 것을 잊었다,

Intent intent = new Intent(SimpleSleepActivity.this, 
      AlarmFromNow.class); 
intent.setAction("Doesn't Really Matter"); 
PendingIntent sender = PendingIntent.getBroadcast(
      SimpleSleepActivity.this, 0, intent, 0); 
+0

나는 지쳤으나 여전히 어떤 이유로 작동하지 않았습니다. : \ hmm 왜 생각할 수 없습니까? 어쩌면 내 AlarmFromNow 클래스의 어딘가에 있을까요? – domshyra

+0

AndroidManifest.xml에'SET_ALARM' 권한을 추가 했습니까? –

관련 문제