准备完成的GPS相机的部分,相机部分已经完成,GPS部分还差一些
下面是相机部分,没有自己设计复杂的相机,只是简单的调用android系统的相机,操作包括图像显示,文件操作,文件修改。
准备完成的功能:
虽然很多手机里面已经集成了这个功能,但我还是想自己完成一个,就是使用GPS收集地理信息,中文的,将它加入到当前拍的照片中,功能不复杂,但需要花些时间。
这里列出相机APP的代码:
首先是layout下的xml:activity_gpscmain.xml
=============================
===========
===========
===========
===========
===========
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-
xmlns:tools="http://schemas.android.com/tools" -
android:layout_width="fill_parent" -
android:layout_height="fill_parent" -
tools:context=".GPSCMainActivity" -
android:orientation="vertical" -
-
> -
<ImageView -
android:id="@+id/imageView" -
android:layout_width="fill_parent" -
android:layout_height="wrap_content" -
android:layout_alignParentBottom="true" -
android:layout_below="@+id/button" -
android:background="#999999" /> -
<Button -
android:id="@+id/button1" -
android:layout_width="wrap_content" -
android:layout_height="wrap_content" -
android:text="点击加载位置" /> -
<Button -
android:id="@+id/button" -
android:layout_width="wrap_content" -
android:layout_height="wrap_content" -
android:layout_alignParentRight="true" -
android:layout_alignParentTop="true" -
android:text="点击启动相机" /> -
<TextView -
android:id="@+id/textView1" -
android:layout_width="wrap_content" -
android:layout_height="wrap_content" -
android:layout_alignBaseline="@+id/button1" -
android:layout_alignBottom="@+id/button1" -
android:layout_centerHorizontal="true" -
android:textColor="#ff0000" -
-
android:text="未加载位置" /> - </RelativeLayout>
=============================
===========
===========
===========
===========
===========
接下来是相机的主文件:GPSCMainActivity.java
=============================
===========
===========
===========
===========
===========
- package com.example.gpscamera;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.text.SimpleDateFormat;
//时间获取 - import java.util.Date; //日期显示
- import android.app.Activity;
- import android.content.Intent;
- import android.graphics.Bitmap;
- import android.graphics.Color;
- import android.os.Bundle;
- import android.os.Environment;
- import android.provider.MediaStore;
- import android.text.format.Time;//时间获取
- import android.util.Log;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.ImageView;
- import android.widget.TextView;
- import android.widget.Toast;
- public class GPSCMainActivity extends Activity {
- public static String picturename="";
- public static
int picturenum=0; - public static boolean GPSstateADD=false;//设置地理信息是否添加
- public static String GPSstate="拍摄位置:无";//地理信息
- public static String getnowdata()//得到当前时间,作为文件名
- {
- Time t=new Time(); // or Time t=new Time("GMT+8"); 加上Time Zone资料。
- t.setToNow(); // 取得系统时间。
- int year = t.year;
- int month = t.month;
- int date = t.monthDay;
- int hour = t.hour; // 0-23
- int minute = t.minute;
- int second = t.second;
- String str=""+year+"_"+month+"_"+date+"-"+hour+"_"+minute+"_"+second;
- return str;
- }
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_gpscmain);
- Button button = (Button) findViewById(R.id.button);
- Button button1=(Button) findViewById(R.id.button1);
- final TextView textview1=(TextView) findViewById(R.id.textView1);//设置信息提示
- if (GPSCMainActivity.GPSstateADD)//为真,则已加载
- {
- textview1.setText("已加载位置");
- textview1.setTextColor(Color.rgb(0, 255, 0));//设置字体颜色红色
- }
- else
- {
- textview1.setText("未加载位置");
- textview1.setTextColor(Color.rgb(255, 0, 0));//设置字体颜色绿色
- }
- button.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- startActivityForResult(intent, 1);//启动照相机
- }
- });
- button1.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v){
- if (GPSCMainActivity.GPSstateADD)
- {
- GPSCMainActivity.GPSstateADD=false;
- textview1.setText("未加载位置");
- textview1.setTextColor(Color.rgb(255, 0, 0));//设置字体颜色红色
- //Toast.makeText(this, "", 3).show();//想做个信息提示框,但没成功
- }
- else
- {
- GPSCMainActivity.GPSstateADD=true;
- textview1.setText("已加载位置");
- textview1.setTextColor(Color.rgb(0, 255, 0));//设置字体颜色绿色
- }
- }
- });
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (resultCode == Activity.RESULT_OK) {
- String sdStatus = Environment.getExternalStorageState();
- if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用
- Log.v("TestFile",
- "SD card is not avaiable/writeable right now.");
- return;
- }
- Bundle bundle = data.getExtras();
- Bitmap bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式
- FileOutputStream b = null;
- File file = new File("/sdcard/myImage/");
- file.mkdirs();// 创建文件夹
- int num=GPSCMainActivity.picturenum;
- num++;
- GPSCMainActivity.picturenum=num;//相片号码
- String data0=this.getnowdata();//相片日期
- String fileName="";
- if(GPSCMainActivity.GPSstateADD)//将地理信息添加到文件名中
- {
- fileName = "/sdcard/myImage/"+data0+"_"+GPSCMainActivity.picturenum+GPSCMainActivity.GPSstate+".jpg";
- }
- else
- {
- fileName = "/sdcard/myImage/"+data0+"_"+GPSCMainActivity.picturenum+".jpg";
- }
- //String fileName = "/sdcard/myImage/"+data0+"_"+MyCaremaActivity.picturenum+".jpg";//"+MyCaremaActivity.picturenum+"
- try {
- b = new FileOutputStream(fileName);
- bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } finally {
- try {
- b.flush();
- b.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- ((ImageView) findViewById(R.id.imageView)).setImageBitmap(bitmap);// 将图片显示在ImageView里
- }
- }
- }
=============================
===========
===========
===========
===========
===========
以上是相机部分的代码,我完成的还有GPS查询方面的代码,下篇贴出,作为以后的参考
主要是这个小项目没有太多的时间完成,只做完了一半,如果以后有时间还需要继续完成。
=============================
===========
===========
===========
===========
===========