2014-10-27 3 views
5

मेरे पास बैकएंड पर चलने वाले मेरे एप्लिकेशन में एक सेवा है, जब मैं बटन वॉल्यूम दबाता हूं और बटन वॉल्यूम डाउन दबाता हूं तो सेवा शुरू की जा सकती है।फ़ोन लॉक होने पर वॉल्यूम बटन सुनें

public class SettingsContentObserver extends ContentObserver { 


int previousVolume; 
Context context; 

public SettingsContentObserver(Context c, Handler handler) { 
    super(handler); 
    context=c; 

    AudioManager audio = (AudioManager)  context.getSystemService(Context.AUDIO_SERVICE); 
    previousVolume = audio.getStreamVolume(AudioManager.STREAM_RING); 

} 



@Override 
public boolean deliverSelfNotifications() { 
    return super.deliverSelfNotifications(); 
} 

@Override 
public void onChange(boolean selfChange) { 
    super.onChange(selfChange); 

    AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
    int currentVolume = audio.getStreamVolume(AudioManager.STREAM_RING); 

    int delta=previousVolume-currentVolume; 



     if(delta > 0) 
     { 
      System.out.println("Decreased") ; 
      Intent intent = new Intent(context, MyAlarmService.class); 
      context.stopService(intent); 
      previousVolume=currentVolume; 
     } 
     else if(delta < 0) 
     { 
       System.out.println("Increased"); 
       Intent intent = new Intent(context, MyAlarmService.class); 
       context.startService(intent); 
       previousVolume=currentVolume; 
     } 


} 
} 

मैं जब मेरे फ़ोन लॉक होने पर (स्क्रीन के बंद होने), जब मैं नेट में खोज मुझे लगता है, मैं इसे परीक्षण है कि मैं एक BroadcastReceivre का उपयोग करना चाहिए एक ही काम करने के लिए चाहते हैं, लेकिन यह नहीं है काम।

public class YourBoardcastReceiver extends BroadcastReceiver { 
    @Override 
public void onReceive(Context context, Intent intent) { 


    Log.e("get something", "i dont know what!!"); 

    String intentAction = intent.getAction(); 
    KeyEvent event = null; 
    if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) { 
     event = (KeyEvent) intent 
      .getParcelableExtra(Intent.EXTRA_KEY_EVENT); 
    } 

    if (event == null) { 
     return; 
    } 

    int keycode = event.getKeyCode(); 
    int action = event.getAction(); 
    long eventtime = event.getEventTime(); 

    if (keycode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE 
     || keycode == KeyEvent.KEYCODE_HEADSETHOOK) { 
    if (action == KeyEvent.ACTION_DOWN) { 

      Intent intent1 = new Intent(context, MyAlarmService.class); 
      context.stopService(intent1); 

     if (isOrderedBroadcast()) { 
      abortBroadcast(); 
     } 

     else if (action == KeyEvent.ACTION_UP) { 

       Intent intent11 = new Intent(context, MyAlarmService.class); 
       context.startService(intent11); 

     } 

      if (isOrderedBroadcast()) { 
       abortBroadcast(); 


    } 
} 
} 
} 


} 

एंड्रॉयड प्रकट में मैं जोड़ें:

<receiver android:name="YourBoardcastReceiver"> 
      <intent-filter> 
        <action android:name="android.intent.action.SCREEN_ON" /> 
      </intent-filter> 
    </receiver> 

और methode पर MainActivity में oncrete मैं जोड़ें:

AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
ComponentName mRemoteControlResponder = new ComponentName(getPackageName(), 
YourBoardcastReceiver.class.getName()); 

दलीलों मैं मुझे कुछ मदद दे सकते हैं, सोचता।

उत्तर

0

कोशिश Intent.ACTION_SCREEN_OFF और Intent.ACTION_SCREEN_ON

5

फोन लॉक होने पर/स्लीप मोड हम बटन परिवर्तन करने के लिए बात नहीं कर सकते हैं के लिए प्रसारण रिसीवर के साथ पंजीकरण, लेकिन हम मात्रा बटन को सुनने के लिए कुछ हैक कर सकते हैं।

Github: https://github.com/praslnx8/volume_Screen_Lock

उन ऐप्लिकेशन को पृष्ठभूमि में 0 मात्रा और फिर कुंजी हमेशा MediaButtonIntent

साथ रिसीवर से सुनी हो जाएगा के साथ मीडिया खेल रहे हैं
संबंधित मुद्दे