안드로이드입니다 펌웨어 (this 스레드에서 예를 피합니다. (22), 또는 that 토론)를 실행 . 일반적으로 작업 템플릿은 Service
이며 "유선 헤드폰"오디오 "스트림"에서 해당 변경 사항을 수행하는 것보다 "시스템/음악"오디오 스트림 (또는 미디어 버튼 누름)의 플러그/플러그 이벤트 및 볼륨을 추적합니다 (이러한 스트림은 "표준"안드로이드이지만, 분명히 같은 것을 "Android Philips"에 표시) 수준입니다. 문제는 "필립스 Android TV API"가 없어도 Android SDK 만 사용하여 볼륨 "유선 헤드폰"오디오 스트림 수준을 변경할 수없는 것 같습니다 (아마 공개적으로 아닐 것입니다). (아마 "필립스 안드로이드 TV의 API '없이 불가능) 유선 헤드폰의 변화 볼륨 레벨 :
public class VolumeTrackingService extends Service {
private static final String TAG = VolumeTrackingService.class.getSimpleName();
public static final String ACTION_START = "VolumeTrackingService.ACTION_START";
public static final String ACTION_STOP = "VolumeTrackingService.ACTION_STOP";
HeadsetPlugIntentReceiver mHeadsetPlugReceiver;
private static boolean mHeadsetPlugged = false;
private SettingsContentObserver mSettingsContentObserver;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
mHeadsetPlugReceiver = new HeadsetPlugIntentReceiver();
registerReceiver(mHeadsetPlugReceiver, new IntentFilter(Intent.ACTION_HEADSET_PLUG));
mSettingsContentObserver = new SettingsContentObserver(new Handler());
getApplicationContext().getContentResolver().registerContentObserver(android.provider.Settings.System.CONTENT_URI, true, mSettingsContentObserver);
}
@Override
public void onDestroy() {
getApplicationContext().getContentResolver().unregisterContentObserver(mSettingsContentObserver);
unregisterReceiver(mHeadsetPlugReceiver);
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null) {
String actionRequested = intent.getAction();
if (ACTION_START.equals(actionRequested)) {
} else if (ACTION_STOP.equals(actionRequested)) {
stopSelf();
}
}
return START_STICKY;
}
private int getSystemVolumeInPercentage() {
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
final int streamVolumeMax = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
final int streamVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
return 100 * streamVolume/streamVolumeMax;
}
private void setHeadphonesVolume(int volumeInPercentage) {
// there should be magic of wired headphones volume level changing
}
private void processVolumeChanges() {
if (mHeadsetPlugged) {
int systemVolumeInPercentage = getSystemVolumeInPercentage();
setHeadphonesVolume(systemVolumeInPercentage);
}
}
public class SettingsContentObserver extends ContentObserver {
public SettingsContentObserver(Handler handler) {
super(handler);
}
@Override
public boolean deliverSelfNotifications() {
return super.deliverSelfNotifications();
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
if (mHeadsetPlugged) {
processVolumeChanges();
}
}
}
public class HeadsetPlugIntentReceiver extends android.content.BroadcastReceiver {
@Override
public void onReceive(Context ctx, Intent intent) {
if (intent.getAction().equals(android.media.AudioManager.ACTION_HEADSET_PLUG)) {
mHeadsetPlugged = intent.getIntExtra("state", 0) == 1;
}
}
}
}
불행하게도이 주요 문제를 해결하지 :"VolumeTrackingService "에 대한
템플릿 소스 코드는 다음과 같이 할 수있다.
서라운드 사운드 시스템에 리모콘이있는 경우 위에 설명 된 Service
의 사운드 시스템 리모컨 명령을 에뮬레이트하고 필립스 49PUS6401 Android TV의 USB 호스트에 연결된 IR 동글을 통해 전송할 수 있습니다.
android는 마스터와 헤드폰 출력을 구별하지 않습니다. 스트림을 조정할 수 있습니다. https://developer.android.com/reference/android/media/AudioManager.html#adjustStreamVolume(int,%20int,%20int) – njzk2
정상적으로는 알 수 없지만 이 TV는 헤드폰이 항상 활성화되어 있고 볼륨이 별도로 제어되도록 출력을 트윈 조절할 수 있습니다. 이것은 지원 포럼에 널리 언급되어 있으며 일부 Sony TV에도이 문제가 있습니다. http://www.supportforum.philips.com /en/archive/index.php/t-1361.html –
TV 헤드폰 출력은 HDMI 입력의 오디오만을위한 것이라고 생각하십니까? 맞습니까? –