多媒體
- 音樂播放器
- 視頻播放器
- 照相機
- 錄音機
- 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); } }