本文主要是介绍Training - Multimedia Graphics Animation,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Building Apps with Multimedia
总结:1、stream type 2. key event 3. audio focus 4、check headset...
Managing Audio Playback
Controlling Your App's Volume and Playback
Identify Which Audio Stream to Use
1.choose audio stream
Use Hardware Volume Keys to Control Your App's Audio Volume
setAudioVolumeControlStream() - > 可控制音量键事件
setVolumeControlStream(AudioManager.STREAM_MUSIC);
Use Hardware Playback Control Keys to Control Your App's Audio Playback
有的机器有play, pause...等等音乐播放的按钮,或者有些耳机提供按钮——所谓“线控”
这些按钮按下去后,系统发出一个broadcast intent, ACTION_MEDIA_BUTTON, EXTRA_KEY_EVENT, KeyEvent类,KEYCODE_MEDIA_*
<receiver android:name=".RemoteControlReceiver"><intent-filter><action android:name="android.intent.action.MEDIA_BUTTON" /></intent-filter>
</receiver>
public class RemoteControlReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);if (KeyEvent.KEYCODE_MEDIA_PLAY == event.getKeyCode()) {// Handle key press.}}}
}
动态注册reciever(动态注册receiver之后,只有这个receiver可以接收这个intent)
AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE);
...// Start listening for button presses
am.registerMediaButtonEventReceiver(RemoteControlReceiver);
...// Stop listening for button presses
am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
Managing Audio Focus
2. audio focus
Request the Audio Focus
1. AudioManager.requestAudioFoucs() 2. audio focus 分为 permanent, transient 3. abandonAudioFocus()
AudioManager.OnAudioFocusChangeListener
AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE);
...// Request audio focus for playback
int result = am.requestAudioFocus(afChangeListener,// Use the music stream.AudioManager.STREAM_MUSIC,// Request permanent focus.AudioManager.AUDIOFOCUS_GAIN);if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);// Start playback.
}
// Abandon audio focus when playback complete
am.abandonAudioFocus(afChangeListener);
ducking (duck的含义见
原文链接)
// Request audio focus for playback
int result = am.requestAudioFocus(afChangeListener,// Use the music stream.AudioManager.STREAM_MUSIC,// Request permanent focus.AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {// Start playback.
}
Handle the Loss of Audio Focus
onAudioFocusChange()
Duck!
duck就是暂时降低一下音量
OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {public void onAudioFocusChange(int focusChange) {if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) {// Lower the volume} else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {// Raise it back to normal}}
};
Dealing with Audio Output Hardware
Check What Hardware is Being Used
if (isBluetoothA2dpOn()) {// Adjust output for Bluetooth.
} else if (isSpeakerphoneOn()) {// Adjust output for Speakerphone.
} else if (isWiredHeadsetOn()) {// Adjust output for headsets
} else { // If audio plays and noone can hear it, is it still playing?
}
Handle Changes in the Audio Output Hardware
拔掉耳机之后,扬声器会突然很大声音的情况。原文
(Boradcast Intent)
Capturing Photos
Taking Photos Simply : 调用其他拍照程序
声明依赖摄像头特性
<manifest ... ><uses-feature android:name="android.hardware.camera" android:required="false"
/>
</manifest ... >
PackageManager.hasSystemFeature(....)
private void dispatchTakePictureIntent(int actionCode) {Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(takePictureIntent, actionCode);
}
public static boolean isIntentAvailable(Context context, String action) {final PackageManager packageManager = context.getPackageManager();final Intent intent = new Intent(action);List<ResolveInfo> list =packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);return list.size() > 0;
}
onActivityResult()获得图片数据(仅仅是thumnail):
private void handleSmallCameraPhoto(Intent intent) {Bundle extras = intent.getExtras();mImageBitmap = (Bitmap) extras.get("data");mImageView.setImageBitmap(mImageBitmap);
}
要保存图片,需传给Intent一个File(表示输出文件路径)
File f = createImageFile();
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
将该照片添加到Gallery:
private void galleryAddPic() {Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);File f = new File(mCurrentPhotoPath);Uri contentUri = Uri.fromFile(f);mediaScanIntent.setData(contentUri);this.sendBroadcast(mediaScanIntent);
}
Recording Videos Simply: //TODO
Controlling the Camera
//TODO
Media Playback
已看完
Supported Media Formats
尽管可以随意使用codec,但是最好选用平台无关的codec。
Android支持的网络协议(多媒体相关):原文
Android支持的编码格式:原文 CamcorderProfile 类
视频参数配置建议: 原文
Audio Capture//TODO
JetPlayer//TODO
Camera//TODO
这篇关于Training - Multimedia Graphics Animation的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!