2012-11-09 10 views
5

ここでは、画面がオンかどうかを判断しようとしていますが、電源ロック/アンロックボタンを押しても機能していないようです。アプリケーションはエラーなしで動作しますが、if-elseのコードは有効ではないようです。 編集 今のところコード作業(ありがとうオルガン)ですが、メディアプレイヤーの再生は停止せず、毎回オン/オフ画面の新しいメディアプレーヤーオブジェクトが作成されます(複数再生)。画面のオン/オフ検出

SCBroadcaster.java

public class SCBroadcaster extends BroadcastReceiver { 
    PowerManager pm; 
    MediaPlayer mp; 
    public static boolean wasScreenOn = true; 

    @Override 
    public void onReceive(Context arg0, Intent arg1) { 
     // TODO Auto-generated method stub 
     mp = MediaPlayer.create(arg0, R.raw.gale); 
     if (arg1.getAction().equals(Intent.ACTION_SCREEN_ON)) { 
        mp.stop(); 
      mp.release(); 
      Toast.makeText(arg0, "oNONONO", Toast.LENGTH_LONG).show(); 

     } else if (arg1.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
      mp.start(); 
     } 

    } 

} 

MainActivity.java

public class MainActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF); 
    filter.addAction(Intent.ACTION_SCREEN_ON); 
    BroadcastReceiver bre = new SCBroadcaster(); 
    registerReceiver(bre, filter); 
} 

protected void onPause() { 
    super.onPause(); 
    if (SCBroadcaster.wasScreenOn) { 
     System.out.println("SCREEN TURNED OFF"); 
    } else { 

    } 
} 

protected void onResume() { 
    super.onResume(); 
    if (!SCBroadcaster.wasScreenOn) { 

    } else { 

    } 
} 

}

答えて

5

Intent.ACTION_SCREEN_OFFとACTION_SCREEN_ON上記放送登録のためにチェックアウト。 hereあなたは良い例を見つけることができます。

+0

リンクのコードは正常に動作しますが、停止と解放の方法を使用した後でも、メディアプレイヤーの再生は停止しません。 – dreamer1989

2

あなたの活動の中にこれを追加することができます。

IntentFilter filter = new IntentFilter(); 
filter.addAction(Intent.ACTION_SCREEN_OFF); 
BroadcastReceiver mReceiver = new ScreenReceiver(); 
registerReceiver(mReceiver, filter); 

同様にあなたがACTION_SCREENとアプローチが私のために動作しませんでしたまた

6

ACTION_SCREEN_ONのために追加することができます。

/** 
* Is the screen of the device on. 
* @param context the context 
* @return true when (at least one) screen is on 
*/ 
public boolean isScreenOn(Context context) { 
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) { 
     DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE); 
     boolean screenOn = false; 
     for (Display display : dm.getDisplays()) { 
      if (display.getState() != Display.STATE_OFF) { 
       screenOn = true; 
      } 
     } 
     return screenOn; 
    } else { 
     PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
     //noinspection deprecation 
     return pm.isScreenOn(); 
    } 
} 
+0

このアプローチは、画面がonPauseのオン/オフ時にのみ処理する必要があったため、 )。 onResume()の前に画面がオンかオフかを扱う必要がある場合は、別の方法を使用する必要があります。 – filipebarretto

+0

画面がロックされているとどうなりますか?私は上記の解決策はそれを検出できないと思う – Jame

0

があなたのbackgroung ServiceBroadcastReceiverIntent.ACTION_SCREEN_ONためとIntent.ACTION_SCREEN_OFFイベントを登録します。いくつかの異なる解決した後、このコードでは、最終的には私のために問題を解決しました。それは私のために働いた。

関連する問題