2015-03-19 4 views
1

Я простирающийся класс BroadcastReceiver, но в данной функции нужно использовать getIntent() функции, которая является частью класса активности. Как использовать эту функцию, так как я могу расширить только один класс.Использование метода из класса активности

public class AlarmReceiver extends BroadcastReceiver { 

AudioManager audioControl; 
Bundle extras; 
int startHour,startMinute; 

@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    SimpleDateFormat sdf = new SimpleDateFormat("EEEE"); 
    Date d = new Date(); 
    String day = sdf.format(d); 
    Calendar c = Calendar.getInstance(); 
    audioControl = (AudioManager) context 
      .getSystemService(Context.AUDIO_SERVICE); 
    extras = getIntent().getExtras(); 
    if(extras!=null){ 
     startHour = extras.getInt("startHour"); 
     startMinute = extras.getInt("startMinute"); 
    } 

    int minute = c.get(Calendar.MINUTE); 
    int hour = c.get(Calendar.HOUR_OF_DAY); 
    if(day.equals("Thursday")){ 
     if(hour==startHour){ 
      if(minute==startMinute){ 
       audioControl.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); 
      } 
     } 
    } 

} 

EDIT: Мой главный класс:

public class Settings extends Activity implements View.OnClickListener { 


private PendingIntent pendingIntent; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.setting); 
    Intent alarmIntent = new Intent(Settings.this, AlarmReceiver.class); 
    alarmIntent.putExtra("day", "Tuesday"); 
    pendingIntent = PendingIntent.getBroadcast(Settings.this, 0, alarmIntent, 0); 
    alarmRepeat(); 
} 
    public void alarmRepeat(){ 
    Calendar cal = Calendar.getInstance(); 
    AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    manager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 1000, pendingIntent); 
} 
+0

Ну, какие намерения деятельности вы хотите получить? – immibis

+1

помните, что для сравнения строк вы должны использовать равные – Blackbelt

+0

@ immibis..Я прохожу Intent от my mainActivity, где получаю начальные значения startHour и startMinute. –

ответ

0

Вам не нужно использовать getIntent() - метод. Намерение будет предоставлено в качестве параметра в вашем методе onReceive.

Вместо использования:

extras = getIntent().getExtras(); 

вы могли бы просто использовать

extras = intent.getExtras(); 
+0

Это не сработало. Я включил основной класс. См. Редактирование. –

1

Просто проверить OnReceive метод

@Override          
public void onReceive(Context context, Intent intent) { 
               ^^^^^ 
    //you already have an instance of Intent object 
    //just use it like this. 
    Bundle extras=intent.getExtras(); 
} 
+0

Это не сработало. Я включил основной класс. См. Редактирование. –

0

В вашей деятельности()

Intent intent = new Intent("my.action.string"); 
intent.putExtra("startHour", ******); 
sendBroadcast(intent); 

В вашем классе AlarmReceiver, изменить

extras = getIntent().getExtras(); 

в

extras = intent.getExtras(); 
if(extras.equals("my.action.string")){ 
    String shour= intent.getExtras().getString("startHour"); 

} 

и menifest

<receiver android:name=".AlramReceiver" android:enabled="true"> 
    <intent-filter> 
     <!-- and your existing actions --> 
     <action android:name="my.action.string" /> 
     <!-- and some more actions if you want --> 
    </intent-filter> 
</receiver> 
+0

Это не сработало. См. Редактирование, которое я включил в основной класс. –

0

активность не реализует интерфейсы сериализуемого и Parcelable, так что вы не можете передать его в качестве параметра Intent, а именно, вы не можете назвать так:

intent.putExtra(string, Activity); 

Между тем, при регистрации BroadcastReceiver, Intent был принят в качестве параметра. В то же время вы можете получить его, что является вторым параметром при приеме (Context, Intent) BroadcastReceiver.

@Override          
public void onReceive(Context context, Intent intent) { 
    //intent is exactly the Intent you passed,into which you can put your startHour and startMinute integer values. 
    int startHour = intent.getInt("startHour"); 
    int startMinute = intent.getInt("startMinute"); 
} 
+0

Я использовал, как вы сказали, но он не работает, когда я что-то пропускаю. См. Редактирование. –

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