2012-10-22 6 views
3

원래 삼성 헤드셋 버튼을 (BroadcastReciever를 통해) 감지하려고합니다.삼성 헤드셋에서 버튼 누름 감지 Android

코드는 간단하다 :

public class MediaButtonIntentReceiver extends BroadcastReceiver { 

public MediaButtonIntentReceiver() { 
    super(); 
} 

@Override 
public void onReceive(Context context, Intent intent) { 
    String intentAction = intent.getAction(); 
    Toast.makeText(context, "Action: "+intentAction, Toast.LENGTH_SHORT).show(); 
    if (!Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) { 
     return; 
    } 
    Toast.makeText(context, "BUTTON PRESSED!", Toast.LENGTH_SHORT).show(); 
    KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); 
    if (event == null) { 
     return; 
    } 
    int action = event.getAction(); 
    if (action == KeyEvent.ACTION_DOWN) { 
    // do something 
     Toast.makeText(context, "BUTTON PRESSED!", Toast.LENGTH_SHORT).show(); 
    } 
    abortBroadcast(); 
} 

매니페스트 : 나는 은하 (S1)에서 테스트 한

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/title_activity_main" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <receiver android:name=".MediaButtonIntentReceiver" > 
     <intent-filter android:priority="100000000000000" > 
      <action android:name="android.intent.action.MEDIA_BUTTON" /> 
     </intent-filter> 
    </receiver> 
</application> 

(2 개 뿌리 장치, 아무 일도)와 갤럭시 노트 (미디어가 시작되었다/정지 볼륨이 바뀌었지만 코드에서 아무 것도 발생하지 않았습니다.), HTC의 모든 것이 정상적으로 작동했습니다. 내가 여러 번 변경했을 때 우선 순위 문제가 아닌지 99 % 확신합니다.

누군가가 거기에서 무슨 일이 일어나고 있는지 알고 있다면 고맙겠습니다. 감사합니다. . Udi

답변

2

registerMediaButtonEventReceiverAudioManager으로 보내 이벤트를 수신해야합니다. 이 상태는 registerMediaButtonEventReceiver()를 호출하거나 unregisterMediaButtonEventReceiver()을 호출 할 때까지 유지됩니다. 예를 들어

,이 같은 활동

public class MediaButtonActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     ((AudioManager)getSystemService(AUDIO_SERVICE)).registerMediaButtonEventReceiver(new ComponentName(
                            this, 
                            MediaButtonIntentReceiver.class)); 
    } 
} 

ACTION_MEDIA_BUTTON 이벤트를 얻기 위해 매니페스트 등록 MediaButtonIntentReceiver 수있게된다.

0

시도해보십시오. S-Voice를 끄고 응용 프로그램을 다시 실행하십시오.