2012-10-22 70 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(); 
} 

清單:

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

我在星系S1進行了測試(2種植根設備,什麼都沒有發生)和GALAXY NOTE(媒體開始/停止和音量已經改變了,但代碼沒有發生什麼事..),在HTC一切正常。 我99%肯定這不是優先考慮的問題,因爲我多次改變它。

如果有人知道那裏發生了什麼,我將不勝感激。 謝謝。 Udi

回答

2

您還需要致電AudioManager以便接收活動registerMediaButtonEventReceiver。該狀態將一直持續到別人調用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)); 
    } 
} 

將使您的清單登記MediaButtonIntentReceiver得到ACTION_MEDIA_BUTTON事件。

0

試試關閉S語音並再次運行您的應用程序。