多媒体

来源:互联网 发布:会计师事务所待遇 知乎 编辑:程序博客网 时间:2024/06/10 09:07

多媒体

  1. 音乐播放器
  2. 视频播放器
  3. 照相机
  4. 录音机
  5. 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. 照相机

  1. 照相机

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();      }    }  }}
  1. 自定义照相机
    • 需求 : 实现一个自定义的相机App,参见360项目第四天笔记
    • 实现 : 参考docs/guide/topics/media/camera.html#custom-camera章节
  2. 偷拍功能的实现
    • 需求 : 实现偷拍功能的照相机
    • 实现 :
      1. 使用前置摄像头拍照
      2. 去掉按钮
      3. 去掉预览画面
      4. 使用透明样式
      5. 拍照完成关闭当前页面
      6. 6.

04. 录音机

05. GPS

  1. 定位方式的介绍
    • 基站定位. 基站定位的原理是每个手机可以同时接收多个附近基站的信号,因为基站的位置是固定的,所以根据基站信号强度,可以计算出手机所在的大概位置。基站越多,位置信息也就越精确。
    • WIFI定位. 因为手机要连接WiFi,每一个WiFi都对应一个路由器,路由器都有mac地址,并且这个路由器一般在一段时间内位置不会发生变化。设备在开启WiFi的情况下会收集附近的AP信息,并将这些信息发送到位置服务器,服务器检索出每个AP的位置信息,并根据每个信号的强弱程度计算出设备的大概位置。
    • GPS定位. GPS定位类似于基站定位,在地球上方大概有24颗GPS卫星,这些卫星通过光信息,再经过复杂的数学运算,来确定GPS芯片的位置。
  2. 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);    }}

需求 : 火星坐标的转换

  • 使用方法:
    1. 拷贝axisoffset.dat文件到工程
    2. 模板代码

    3. 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);    }}
0 0