多媒体

多媒体

  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来实现
  • 代码 :

    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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值