2013-02-25 4 views
0

Я совершенно новой для Android развития и разработки Java поэтому, пожалуйста, извините мой идиотский вопрос :)Android - OnKeyDown вызывается из OnReceive

Я хочу, чтобы настроить приложение, которое останавливает SMS звук при нажатии кнопки.

До сих пор мне удалось настроить SMSReceiver, который видит, когда приходит SMS, и делает действия, о которых сказано. Вот код:

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.media.AudioManager; 

public class SMSReceiver extends BroadcastReceiver { 
    @Override 
public void onReceive(Context context, Intent intent) { 
    AudioManager audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 
    switch (audioManager.getRingerMode()) { 
    case AudioManager.RINGER_MODE_VIBRATE: 
     audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); 
     try { 
      Thread.sleep(5000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); 
    break; 
    case AudioManager.RINGER_MODE_NORMAL: 
     audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); 
     try { 
      Thread.sleep(5000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); 
    break; 
    } 
    } 
} 

Теперь, что мне нужно делать действия внутри OnReceive только при нажатии на кнопку громкости вниз (или любую другую кнопку для этого вопроса).

Я пытался добавить OnKeyDown метод ... но я не в состоянии разобраться :(

Может кто-то пожалуйста, помогите

ответ

1

Edit:.? Сделал некоторые изменения

public static Boolean buttonPressed = false; 

//put these 2 methods inside your current activity 

@Override //important! 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)){ 
      buttonPressed = true; 
     } 
     return super.onKeyDown(keyCode, event);; 
    } 

@Override 
    public boolean onKeyUp(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)){ 
      buttonPressed = false; 
     } 
     return super.onKeyUp(keyCode, event);; 
    } 
//This inside your receiver class 
public void onReceive(Context context, Intent intent) 
{ 
    if(buttonPressed){ 
     //your code 
    } 
} 
+0

Спасибо за ответ! Я попробовал, но я не могу заставить его работать. Он всегда возвращает buttonPressed как false, он не ждет ввода ключа. Не уверен, что я делаю что-то неправильно ... Кроме того, если я использую @Override с onKeyDown или onKeyUp, я получаю сообщение об ошибке: «Метод onKeyUp (int, KeyEvent) типа SMSReceiver должен переопределять или реализовывать метод супертипа». Из того, что я прочитал, это можно использовать только в том случае, если я расширяю класс Activity (расширяю BroadcastReceiver) ... не уверен, что это правда или нет. – user2099654

+0

Да, вы правы. Вы должны поместить эти 2 метода в свою (текущую) деятельность! Если вы этого не сделаете, вы сделали свой собственный бесполезный метод и не использовали его для Android в качестве ребенка. Я предполагаю, что вы можете выяснить остальное :). –

1

Как я понял, вы можете использовать следующий способ: когда кнопка меняет свое состояние - записывает логический флаг в настройках пользователя. Когда приходит SMS, вы можете проверить флаг из настроек.

1

Код:

if(buttonPressed){ 
    //your code 
} 

Если быть на самом деле:

if(currentActivity.buttonPressed){ 
    //your code 
} 

Поскольку он не может разрешить buttonPressed из другого класса

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