2012-11-09 16 views
5

यहां मैं यह निर्धारित करने की कोशिश कर रहा हूं कि स्क्रीन चालू है या नहीं, लेकिन जब यह पावर लॉक/अनलॉक बटन दबाती है तो यह काम नहीं कर रहा है। एप्लिकेशन बिना किसी त्रुटि के काम करता है लेकिन अगर कोड में प्रभाव नहीं लगता है। अब संपादित कोड काम (धन्यवाद Olgun), लेकिन मीडियाप्लेयर प्लेबैक नहीं करता है बंद हो जाता है और हर बार/बंद स्क्रीन पर नए मीडियाप्लेयर objct (एकाधिक प्लेबैक) बनाया जाता है।स्क्रीन ऑन/ऑफ डिटेक्शन

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

लिंक में कोड ठीक काम करता है लेकिन स्टॉप और रिलीज विधियों का उपयोग करने के बाद भी mediaplayer प्लेबैक – dreamer1989

2

आप इसे अपनी गतिविधि के अंदर जोड़ने का प्रयास कर सकते हैं।

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

इसी तरह आप ACTION_SCREEN_ON भी

6

ACTION_SCREEN साथ दृष्टिकोण मेरे लिए काम नहीं किया के लिए जोड़ सकते हैं।

/** 
* 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

बंद नहीं करता है यह दृष्टिकोण भी मेरे लिए हल हो गया है, क्योंकि मुझे केवल उस मामले का इलाज करने की आवश्यकता थी जब स्क्रीन चालू या बंद हो गई थी ()। किसी मामले के लिए जहां आपको इलाज करने की आवश्यकता होती है, यदि स्क्रीन रीज़्यूम() से पहले चालू या बंद थी, तो आपको एक अलग दृष्टिकोण का उपयोग करना चाहिए। – filipebarretto

+0

लॉक के साथ स्क्रीन पर क्या होता है। मुझे लगता है कि उपर्युक्त समाधान इसका पता नहीं लगा सकता है – Jame

0

अपने एक backgroung Service में BroadcastReceiverIntent.ACTION_SCREEN_ON के लिए और Intent.ACTION_SCREEN_OFF घटनाओं रजिस्टर: कुछ अलग समाधान के बाद इस कोड को अंत में मेरे लिए समस्या हल हो। यह मेरे लिए काम किया।

संबंधित मुद्दे