Training - Multimedia Graphics Animation

2024-01-12 12:32

本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/597881

相关文章

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

【前端】animation动画以及利用vue制作简单的透明度改变动画,包含vue生命周期实现

一. 问题描述 想做一个文字透明度从1到0然后再从0到1的css动画。 二. 代码写法 2.1 animation写法 2.1.1 animation属性key 2.1.2 代码展示 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=de

Post-Training有多重要?一文带你了解全部细节

1. 简介 随着LLM学界和工业界日新月异的发展,不仅预训练所用的算力和数据正在疯狂内卷,后训练(post-training)的对齐和微调方法也在不断更新。InstructGPT、WebGPT等较早发布的模型使用标准RLHF方法,其中的数据管理风格和规模似乎已经过时。近来,Meta、谷歌和英伟达等AI巨头纷纷发布开源模型,附带发布详尽的论文或报告,包括Llama 3.1、Nemotron 340

Android 属性动画(Property Animation)

本文是学习以下三位大神之后,整理的学习笔记,彩蛋在编号6          http://blog.csdn.net/lmj623565791/article/details/38067475          http://www.cnblogs.com/angeldevil/archive/2011/12/02/2271096.html          http://www.tu

android 动画 ——视图动画(View Animation)

android动画分为视图动画(View Animation)、属性动画(Property Animation) 想看属性动画(Property Animation):请移步至http://blog.csdn.net/u013424496/article/details/51700312 这里我们来说下视图动画(View Animation)的纯代码写法,还有一种是xml调用, 对于xml调

Android Property Animation属性动画

本文内容摘自《疯狂Android讲义 第三版-李刚著作》

有关animation抽屉动画示例

<includeandroid:id="@+id/ly_album_details"android:layout_width="match_parent"android:layout_height="match_parent"layout="@layout/ly_miniplayer_tvseries"android:visibility="gone" ></include>

2015 Multi-University Training Contest 5 1009 MZL#39;s Border

MZL's Border  Problem's Link:  http://acm.hdu.edu.cn/showproblem.php?pid=5351   Mean:  给出一个类似斐波那契数列的字符串序列,要你求给出的f[n]字符串中截取前m位的字符串s中s[1...i] = s[s.size()-i+1....s.size()]的最大长度。 analyse:   过计算