4

スマートフォンを充電するたびにオーディオファイルを再生し、プラグを抜くとアプリケーションが閉じるシンプルなBlackberryアプリを作成したいと思います。

擬似コード

  1. バッテリーケーブルを差し込んだら、アプリケーションを開始します。

  2. アプリケーションは充電中に継続的に音を鳴らします

    間に沈黙のギャップなしでそれをループさせることができませんでした、代わりに音を再生します

  3. ユーザーがケーブルを抜いたら、ストリームを停止し、サウンドを再生し、ストリームを停止します

  4. オプション:バッテリーレベルがクリティカル/充電完了に低下した場合は、音を鳴らします

ドキュメントを見ると、バッテリーが100%かどうかを教えてくれるリスナーはいないと思います。

編集:batteryStatusChangeを介して方法を見つけ、Nateに助けてくれてありがとう

null例外エラーがあります。

編集:InputStreamを使用し、null例外エラーは発生しません。resフォルダにwavファイルを追加しました。以下の新しいコードは、100のサウンドと2つの異なるサウンドを再生します。1つはUSB接続用で、もう1つはUSB切断用です。

public class HelloBlackBerryScreen extends MainScreen implements SystemListener2 {
    private BasicEditField basicEditField;
    private Player HEV;    
    private String wav;
    private InputStream stream;
    private int volume; //going to set volume from GUI using a drop down list, working on it currently

public HelloBlackBerryScreen() 
{
    super( MainScreen.VERTICAL_SCROLL | MainScreen.VERTICAL_SCROLLBAR );
    setTitle( "HelloBlackBerry" );
    add(new RichTextField("Battery", RichTextField.TEXT_ALIGN_HCENTER));

    Application.getApplication().addSystemListener(this);
    
    wav = "voice_on.wav";
    stream = (InputStream)this.getClass().getResourceAsStream("/" + wav);               
    try {
        HEV = Manager.createPlayer(stream, "audio/wav");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (MediaException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public void batteryGood() {
    // TODO Auto-generated method stub
    
}

public void batteryLow() {
    // TODO Auto-generated method stub
    
}

public void batteryStatusChange(int status) 
{
    // TODO Auto-generated method stub
    if ((status & DeviceInfo.BSTAT_LEVEL_CHANGED) != 0)
    {
        if(DeviceInfo.getBatteryLevel() == 100)
        {
            try 
            {
                setWav("power_level_is_100_percent.wav"); 
                HEV.start();
                stream.close();
            } 
            catch (MediaException e) 
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
            catch (IOException e) 
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }               

        }               

    }
}   

public void powerOff() {
    // TODO Auto-generated method stub
    
}

public void powerUp() {
    // TODO Auto-generated method stub
    
}

public void backlightStateChange(boolean on) {
    // TODO Auto-generated method stub
    
}

public void cradleMismatch(boolean mismatch) {
    // TODO Auto-generated method stub
    
}

public void fastReset() {
    // TODO Auto-generated method stub
    
}

public void powerOffRequested(int reason) {
    // TODO Auto-generated method stub
    
}

public void usbConnectionStateChange(int state) 
{
    // TODO Auto-generated method stub
    if (state == USB_STATE_CABLE_CONNECTED) 
    {           
        try 
        {
            setWav("suitchargeok1.wav"); 
            HEV.start();
            stream.close();
        } 
        catch (MediaException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        catch (IOException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }       
        
        } 
        else if (state == USB_STATE_CABLE_DISCONNECTED) 
        {
            try 
            {
                stream.close();
                setWav("battery_pickup.wav"); 
                HEV.start();
                stream.close();
            } catch (MediaException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();                    
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
}

public String getWav() {
    return wav;
}

public void setWav(String wav) {
    this.wav = wav;
    stream = (InputStream)this.getClass().getResourceAsStream("/" + this.wav);
    try {
        HEV = Manager.createPlayer(stream, "audio/wav");
        HEV.realize();
        VolumeControl volume = (VolumeControl) HEV.getControl("VolumeControl");
        volume.setLevel(25);
        HEV.prefetch();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (MediaException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public boolean onClose()
{
    UiApplication.getUiApplication().requestBackground();
    return true;
}

}

4

1 に答える 1

2

アプリをどのように機能させるかについてもう少し明確にする必要があります(質問の下の私のコメントを参照してください)が、SystemListener(実際にSystemListener2は、一種の)を実装する必要があると確信していますSystemListener)USBの状態変化をリッスンします。

接続を検出するためのこのようなもの:

void usbConnectionStateChange(int state) {
   if (state == USB_STATE_CABLE_CONNECTED) {
      // start playing your sound
   } else if (state == USB_STATE_CABLE_DISCONNECTED) {
      // stop playing your sound, and exit, or just stay in the background
   }
}

デバイスの起動時にシステムリスナーを追加/登録する方法に関するリンクは次のとおりです

USB接続の検出については、このBlackBerryフォーラムのリンクを参照してください

また、SystemListener2のAPIドキュメントも

更新:(質問のコード更新に基づいて)投稿者がすでに理解していると思うので、このpublic void batteryStatusChange(int status)メソッドはおそらくここで使用するより直接的なコールバックです。ただし、それはの別のコールバックであるため、他のすべては同じですSystemListener

于 2012-09-15T23:06:37.250 に答える