Android - onKeyDown从onReceive内部调用

时间:2013-02-25 13:09:47

标签: android android-intent

我是Android开发和Java开发的新手,所以请原谅我的愚蠢问题:)

我想设置一个应用程序,在按下按钮时停止短信声音。

到目前为止,我能够设置一个SMSReceiver,它可以看到收到短信的时间并执行所述操作。这是代码:

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方法......但我无法将其排序:(。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

编辑:进行了一些更改

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

答案 1 :(得分:1)

正如我所理解的那样,您可以使用以下方式:当按钮更改其状态时 - 在用户首选项中写入布尔标志。当SMS到来时,您可以检查首选项中的标志。

答案 2 :(得分:1)

代码:

if(buttonPressed){
    //your code
}

实际应该是:

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

因为它无法从另一个类解析buttonPressed