多媒体
- 音乐播放器
- 视频播放器
- 照相机
- 录音机
- GPS
01. 音乐播放器
1. 在res目录下创建raw文件夹,将音乐文件放置其中
2. 播放音乐,示例代码:
private void playMusic(Context context) {
MediaPlayer player = MediaPlayer.create(context, R.raw.alarm);
player.setVolume(1.0f, 1.0f);
player.setLooping(true);
player.start();
}
02. 视频播放器
public class MainActivity extends Activity {
private VideoView vv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vv = (VideoView) findViewById(R.id.vv);
//设置视频源
vv.setVideoPath("http://10.0.2.2:8080/news/10.mp4");
//设置默认的控制面板
vv.setMediaController(new MediaController(this));
//启动
vv.start();
}
}
03. 照相机
- 照相机
public class MainActivity extends Activity {
private static final int REQUEST_CAMERA = 100;
private static final int REQUEST_VIDEO = 200;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void startCamera(View view) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(Environment.getExternalStorageDirectory(), "yz" + new Date().getTime() + ".jpg");
// 给照相机设置保存相片的路径
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
startActivityForResult(intent, REQUEST_CAMERA);
}
public void startVideoCamera(View view) {
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
File file = new File(Environment.getExternalStorageDirectory(), "yz" + new Date().getTime() + ".mp4");
// 给照相机设置保存相片的路径
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
startActivityForResult(intent, REQUEST_VIDEO);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CAMERA) {
//RESULT_OK 这个值是Activity定义好的,所以可以直接使用
if (resultCode == RESULT_OK) {
Toast.makeText(this, "照相成功", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "照相失败", Toast.LENGTH_LONG).show();
}
}else if (requestCode==REQUEST_VIDEO) {
if (resultCode==RESULT_OK) {
Toast.makeText(this, "摄像成功", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(this, "摄像失败", Toast.LENGTH_SHORT).show();
}
}
}
}
- 自定义照相机
- 需求 : 实现一个自定义的相机App,参见360项目第四天笔记
- 实现 : 参考docs/guide/topics/media/camera.html#custom-camera章节
- 偷拍功能的实现
- 需求 : 实现偷拍功能的照相机
- 实现 :
- 使用前置摄像头拍照
- 去掉按钮
- 去掉预览画面
- 使用透明样式
- 拍照完成关闭当前页面
- 6.
04. 录音机
05. GPS
- 定位方式的介绍
- 基站定位. 基站定位的原理是每个手机可以同时接收多个附近基站的信号,因为基站的位置是固定的,所以根据基站信号强度,可以计算出手机所在的大概位置。基站越多,位置信息也就越精确。
- WIFI定位. 因为手机要连接WiFi,每一个WiFi都对应一个路由器,路由器都有mac地址,并且这个路由器一般在一段时间内位置不会发生变化。设备在开启WiFi的情况下会收集附近的AP信息,并将这些信息发送到位置服务器,服务器检索出每个AP的位置信息,并根据每个信号的强弱程度计算出设备的大概位置。
- GPS定位. GPS定位类似于基站定位,在地球上方大概有24颗GPS卫星,这些卫星通过光信息,再经过复杂的数学运算,来确定GPS芯片的位置。
GPS定位的API
public class MainActivity extends Activity implements LocationListener { private LocationManager lm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); } @Override protected void onResume() { super.onResume(); /** * @param provider 使用的定位服务类型 * @param minTime 最小更新定位时间间隔,单位为毫秒 * @param minDistance 最小更新定位距离间隔,单位为米 * @param listener 监听器 */ String provider = LocationManager.GPS_PROVIDER; long minTime = 0; float minDistance = 0; lm.requestLocationUpdates(provider, minTime, minDistance, this); } @Override public void onLocationChanged(Location location) { // 经度 double longitude = location.getLongitude(); // 纬度 double latitude = location.getLatitude(); System.out.println( "onLocationChanged:" + ",longitude:" + longitude + ",latitude:" + latitude); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { System.out.println("onStatusChanged:"); } @Override public void onProviderEnabled(String provider) { System.out.println("onStatusChanged:"); } @Override public void onProviderDisabled(String provider) { System.out.println("onStatusChanged:"); } @Override protected void onPause() { super.onPause(); // 取消监听, 节约资源 lm.removeUpdates(this); } }
需求 : 火星坐标的转换
- 使用方法:
- 拷贝axisoffset.dat文件到工程
- 模板代码
-
try {
// 获取实例
ModifyOffset instance = ModifyOffset.getInstance(new FileInputStream(“axisoffset.dat”));
// 创建坐标点
PointDouble pt = new PointDouble(22.458054, 114.142257);
// 火星坐标转标准坐标
PointDouble c2s = instance.c2s(pt);
// 标准坐标转火星坐标
PointDouble s2c = instance.s2c(pt);
} catch (Exception e) {
e.printStackTrace();
}
通过经纬度获得位置信息
- 需求 : 将获取的经纬度转换为真实地址, 展现给用户
- 实现 : 通过网络API来实现
- 网络API:http://lbs.juhe.cn/api/getaddressbylngb?lngx=116.407431&lngy=39.914492
- 第一个参数为经度,第二个参数为纬度
代码 :
public class GPSService extends Service implements LocationListener { private LocationManager lm; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); lm = (LocationManager) getSystemService(LOCATION_SERVICE); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); } // 位置发生变化的回调 @Override public void onLocationChanged(Location location) { // 获取经纬度 double longitude = location.getLongitude(); double latitude = location.getLatitude(); new Thread(new GetLocationRunnable(longitude, latitude)).start(); } class GetLocationRunnable implements Runnable { private double longitude; private double latitude; private String location; public GetLocationRunnable(double longitude, double latitude) { this.longitude = longitude; this.latitude = latitude; } // http://lbs.juhe.cn/api/getaddressbylngb?lngx=116.407431&lngy=39.914492 @Override public void run() { InputStream is = null; BufferedReader br = null; try { URL url = new URL("http://lbs.juhe.cn/api/getaddressbylngb?lngx=" + longitude + "&lngy=" + latitude); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(30 * 1000); conn.setReadTimeout(30 * 1000); conn.connect(); if (conn.getResponseCode() == 200) { is = conn.getInputStream(); br = new BufferedReader(new InputStreamReader(is)); String result = ""; String temp = ""; while ((temp = br.readLine()) != null) { result += temp; } JSONObject resultJson = new JSONObject(result); JSONObject rowJson = resultJson.getJSONObject("row"); JSONObject resJson = rowJson.getJSONObject("result"); location = resJson.getString("formatted_address"); } else { location = "获取失败"; } } catch (Exception e) { location = "获取失败"; } finally { StreamUtils.close(br); StreamUtils.close(is); } // 安全号码 String savedSafeNum = SPUtils.getString(GPSService.this, Constants.SAFE_NUM); if (TextUtils.isEmpty(savedSafeNum)) { stopSelf(); return; } else { SmsManager manager = SmsManager.getDefault(); manager.sendTextMessage(savedSafeNum, null, "经度:" + longitude + ",纬度:" + latitude + ",真实地址:" + location, null, null); stopSelf(); } } } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } @Override public void onDestroy() { super.onDestroy(); lm.removeUpdates(this); } }