代码解释基本都在脑图当中,自行查看
文件写入代码:RandomAccessfile raf = new RandomAccessfile(file,"rwd");//随机访问文件类,设置为rwd方式,可读取写入raf.seek(file.length());raf.write(strContent.getBytes());raf.close();
获得时间代码:SimpleDateFormat formatter = new SimpleDateFormat("yyyy-M-d HH:mm:ss");//设置获取时间格式Date curDate = new Date(System.currentTimeMillis());String timeNow = formatter.format(curDate);
界面跳转代码:注意,Activity文件是需要根据自己实际情况更换的
Intent intent = new Intent(MainActivity.this,NewfileActivity.class);startActivity(intent);
获得EditText内容:EditText editText = (EditText)findVIEwByID(R.ID.input_filename);//获取EditText对象filename = editText.getText().toString();//获取EditText中内容
在百度地图的Activity中调用EditText中的信息需要创建实例化如下NewfileActivity newfileActivity = new NewfileActivity();filename = newfileActivity.getfilename();
脑图代码MainActivity.javapackage com.example.record;import androIDx.appcompat.app.AppCompatActivity;import androID.content.Intent;import androID.os.Bundle;import androID.vIEw.VIEw;import androID.Widget.button;public class MainActivity extends AppCompatActivity { @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); button btn1 = (button)findVIEwByID(R.ID.btn_recordLocation); btn1.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw v) { Intent intent = new Intent(MainActivity.this,NewfileActivity.class); startActivity(intent); } }); }}
NewfileActivity.javapackage com.example.record;import androIDx.appcompat.app.AppCompatActivity;import androID.content.Intent;import androID.os.Bundle;import androID.util.Log;import androID.vIEw.VIEw;import androID.Widget.button;import androID.Widget.EditText;import javax.security.auth.login.LoginException;public class NewfileActivity extends AppCompatActivity { private static String filename = null; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_new_file); button btn2 = (button)findVIEwByID(R.ID.btn_assure); btn2.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw v) { Intent intent = new Intent(NewfileActivity.this,RecordActivity.class);//跳转到定位界面 startActivity(intent); EditText editText = (EditText)findVIEwByID(R.ID.input_filename);//获取EditText对象 filename = editText.getText().toString();//获取EditText中内容 Log.i("testOutput",filename); } }); } public String getfilename(){ return filename; }}
fileOperations.javapackage com.example.record;import androID.util.Log;import java.io.file;import java.io.RandomAccessfile;public class fileOperations { private static final int REQUEST_EXTERNAL_STORAGE = 1; //生成文件夹,根目录 public static voID makeRootDirectory(String filePath){ file file = null; try{ file = new file(filePath); //不存在就新建 if(!file.exists()){//若此文件实例不存在,则需要创建 file.mkdir();//创建指定的目录,返回一个true或者false值。 Log.i("test","make the RootDirectory"); } }catch (Exception e){ Log.i("error",e + ""); } } //判断文件是否存在 public static boolean fileIsExists(String filePath) { try { file f = new file(filePath);//创建一个file的实例 if(!f.exists()){ return false; } } catch(Exception e) { return false; } return true; } //生成文件 private static file makefilePath(String filePath,String filename){ file file = null; makeRootDirectory(filePath);//此举:如果没创建文件夹则创建 try{ file = new file(filePath + filename);//创建文件,需要路径+文件名 if(!file.exists()){ file.createNewfile();//如果文件不存在则创建该文件// Log.i("test","produce the file"); } } catch (Exception e){ e.printstacktrace(); } return file; } public static voID writeData(String url,String name,String content){ String filePath = url; String filename = name + ".txt";//分别定义了文件的路径以及文件的名称 writeTxtTofile(content,filePath,filename);//将信息写入方法// Log.i("test","write message"); } //字符串写入文本文件 private static voID writeTxtTofile(String strcontent,String filePath,String filename){ makefilePath(filePath,filename);//生成文件 String strfilePath = filePath + filename; //每次写入之前都进行换行 String strContent = strcontent + "\r\n";//换行加顶头 try { file file = new file(strfilePath);//创建文件实例 if(!file.exists()){//如果该文件不存在,则创建// Log.d("Testfile","create the file" + strfilePath); file.getParentfile().mkdirs(); file.createNewfile(); } RandomAccessfile raf = new RandomAccessfile(file,"rwd");//随机访问文件类,设置为rwd方式,可读取写入 raf.seek(file.length()); raf.write(strContent.getBytes()); raf.close(); } catch(Exception e){ Log.e("Testfile","Error on write file:" + e); } }}
RecordActivity.javapackage com.example.record;import androIDx.appcompat.app.AppCompatActivity;import androIDx.core.app.ActivityCompat;import androIDx.core.content.ContextCompat;import androID.Manifest;import androID.content.pm.PackageManager;import androID.os.Bundle;import androID.Widget.TextVIEw;import androID.Widget.Toast;import com.baIDu.location.BDLocation;import com.baIDu.location.BDLocationListener;import com.baIDu.location.LocationClIEnt;import com.baIDu.location.LocationClIEntoption;import com.baIDu.mapAPI.SDKInitializer;import com.baIDu.mapAPI.map.BaIDuMap;import com.baIDu.mapAPI.map.MapStatusUpdate;import com.baIDu.mapAPI.map.MapStatusUpdateFactory;import com.baIDu.mapAPI.map.MapVIEw;import com.baIDu.mapAPI.map.MyLocationData;import com.baIDu.mapAPI.model.LatLng;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;public class RecordActivity extends AppCompatActivity { public LocationClIEnt mLocationClIEnt; private TextVIEw positionText; private MapVIEw mapVIEw; private BaIDuMap baIDuMap; private boolean isFirstLocate = true; private static final String TAG = "MainActivity"; private static String filePath = "/storage/emulated/0/Download/info/"; private static String filename = null; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mLocationClIEnt = new LocationClIEnt(getApplicationContext()); mLocationClIEnt.registerLocationListener(new MyLocationListener());//得到结果时是会调用这个方法的 SDKInitializer.initialize(getApplicationContext()); setContentVIEw(R.layout.activity_record); mapVIEw = (MapVIEw) findVIEwByID(R.ID.bmapVIEw); baIDuMap = mapVIEw.getMap(); baIDuMap.setMyLocationEnabled(true); //将三种请求权限先放至List在放入String List<String> permissionList = new ArrayList<>(); if (ContextCompat.checkSelfPermission(RecordActivity.this, Manifest. permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION); } if (ContextCompat.checkSelfPermission(RecordActivity.this, Manifest. permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.READ_PHONE_STATE); } if (ContextCompat.checkSelfPermission(RecordActivity.this, Manifest. permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } if (!permissionList.isEmpty()) { String[] permissions = permissionList.toArray(new String[permissionList.size()]); ActivityCompat.requestPermissions(RecordActivity.this, permissions, 1);//为三中权限实现一次性申请 } else { requestLocation(); } } private voID requestLocation() { initLocation(); mLocationClIEnt.start();//结果会回调到之前的监听器当中即MyLocationListener } private voID initLocation() { LocationClIEntoption option = new LocationClIEntoption(); option.setScanSpan(1000);//每秒更新位置 option.setCoorType("bd09ll");//默认值是gcj02,中国坐标偏移标准,Google map,高德、腾讯使用 option.setLocationMode(LocationClIEntoption.LocationMode.Hight_Accuracy);//设置传感器类型,其实也就是GPS定位,但无gps信号时,WiFi可以使用 option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要// option.setLocationNotify(true);//可选,默认false,设置是否当GPS有效时按照1S/1次频率输出GPS结果 mLocationClIEnt.setLocoption(option); } private voID navigateto(BDLocation location) {//导航定位方法 if (isFirstLocate) {//是否为第一次定位 LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());//包含经纬度// Log.i("Location"," 经度: " + location.getLongitude() + " 纬度 "// + location.getLatitude());//此行作用是查看坐标是否会隔几秒刷新一次 MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);//此为设置地图的中心 baIDuMap.animateMapStatus(update);//以动画方式更新地图状态,动画耗时 300 ms update = MapStatusUpdateFactory.zoomTo(16f);//设置地图缩放级别 baIDuMap.animateMapStatus(update); isFirstLocate = false;//取消设置地图为中心 //isFirstLocate = true;//确保每次地图中心都为自己现在的位置。 } MyLocationData.Builder locationBuilder = new MyLocationData.Builder();//封装设备现在的位置 locationBuilder.longitude(location.getLongitude()); locationBuilder.latitude(location.getLatitude()); MyLocationData locationData = locationBuilder.build(); baIDuMap.setMyLocationData(locationData);//设置定位数据 writetofile(location);//调用方法,保留经纬度及时间信息到文本文档当中。 } private static voID writetofile(BDLocation location) { NewfileActivity newfileActivity = new NewfileActivity(); filename = newfileActivity.getfilename(); /** * 以下是实现获取系统时间 */ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-M-d HH:mm:ss");//设置获取时间格式 Date curDate = new Date(System.currentTimeMillis()); String timeNow = formatter.format(curDate); /** * 以下的功能是将信息存入文本文档,调用了fileOperations类 */ fileOperations.makeRootDirectory(filePath);//制作文件夹,根目录一个意思 String latLocation = Double.toString(location.getLatitude());//经纬度从double转为String类型 String lonLocation = Double.toString(location.getLongitude()); String locationInfo = lonLocation + " " + latLocation + " " + timeNow;//字符串连接,先经度后纬度,再接上时间 if (!fileOperations.fileIsExists(filePath + filename + ".txt")) {//当文件不存在时,就创建文件并且输入信息 fileOperations.writeData(filePath, filename, locationInfo); } else {//当文件已经存在时,将继续输入信息,并且加一个换行,顶头 fileOperations.writeData(filePath, filename, locationInfo); } } @OverrIDe protected voID onResume() { super.onResume(); } @OverrIDe protected voID onPause() { super.onPause(); } @OverrIDe protected voID onDestroy() { super.onDestroy(); mLocationClIEnt.stop(); mapVIEw.onDestroy(); baIDuMap.setMyLocationEnabled(false); } @OverrIDe public voID onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case 1: if (grantResults.length > 0) { for (int result : grantResults) { if (result != PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, "必须同意所有权限才能使用本程序", Toast.LENGTH_SHORT).show(); finish(); return; } } requestLocation(); } else { Toast.makeText(this, "发生未知错误", Toast.LENGTH_SHORT).show(); finish(); } break; default: } } public class MyLocationListener implements BDLocationListener { @OverrIDe public voID onReceiveLocation(BDLocation location) { if (location.getLocType() == BDLocation.TypeGpsLocation || location.getLocType() == BDLocation.TypeNetWorkLocation) {//当定位的类型属于GPS或者网络定位时,开启此方法navigateto navigateto(location); } } }}
activity_main.xml<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:app="http://schemas.androID.com/apk/res-auto" xmlns:tools="http://schemas.androID.com/tools" androID:orIEntation="vertical" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" tools:context=".MainActivity"> <TextVIEw androID:ID="@+ID/textVIEw1" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_gravity="center" androID:layout_margintop="100dp" androID:text="这是主界面" androID:textSize="30dp"/> <button androID:ID="@+ID/btn_recordLocation" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_gravity="center" androID:layout_margintop="170dp" androID:text="记录位置" androID:textSize="30dp"/></linearLayout>
activity_new_file.xml<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:app="http://schemas.androID.com/apk/res-auto" xmlns:tools="http://schemas.androID.com/tools" androID:orIEntation="vertical" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" tools:context=".NewfileActivity"> <TextVIEw androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_margintop="100dp" androID:layout_gravity="center" androID:text="文件命名" androID:textSize="30dp"/> <TextVIEw androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_margintop="150dp" androID:layout_gravity="center" androID:text="文件命名规范" androID:textSize="22dp"/> <TextVIEw androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_margintop="30sp" androID:layout_gravity="center" androID:text="时间 - 地点 - 次第" androID:textSize="20dp"/> <EditText androID:ID="@+ID/input_filename" androID:layout_wIDth="200dp" androID:layout_height="wrap_content" androID:layout_margintop="30dp" androID:layout_gravity="center" androID:textSize="22dp"/> <button androID:ID="@+ID/btn_assure" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_gravity="center" androID:layout_margintop="30dp" androID:text="确定并跳转" androID:textSize="22dp"/></linearLayout>
activity_record.xml<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:app="http://schemas.androID.com/apk/res-auto" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" tools:context=".RecordActivity"> <com.baIDu.mapAPI.map.MapVIEw androID:ID="@+ID/bmapVIEw" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:clickable="true"/></linearLayout>
AndroIDManifest.xml<?xml version="1.0" enCoding="utf-8"?><manifest xmlns:androID="http://schemas.androID.com/apk/res/androID" package="com.example.record"> <uses-permission androID:name="androID.permission.ACCESS_FINE_LOCATION" /> <uses-permission androID:name="androID.permission.ACCESS_COARSE_LOCATION" /> <uses-permission androID:name="androID.permission.ACCESS_NETWORK_STATE" /> <uses-permission androID:name="androID.permission.ACCESS_WIFI_STATE" /> <uses-permission androID:name="androID.permission.CHANGE_WIFI_STATE" /> <uses-permission androID:name="androID.permission.INTERNET" /> <uses-permission androID:name="androID.permission.READ_PHONE_STATE" /> <uses-permission androID:name="androID.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission androID:name="androID.permission.MOUNT_UNMOUNT_fileSYstemS" /> <uses-permission androID:name="androID.permission.WAKE_LOCK" /> <application androID:allowBackup="true" androID:icon="@mipmap/ic_launcher" androID:label="@string/app_name" androID:roundIcon="@mipmap/ic_launcher_round" androID:supportsRtl="true" androID:theme="@style/Apptheme"> <activity androID:name=".RecordActivity"></activity> <activity androID:name=".NewfileActivity" /> <activity androID:name=".MainActivity"> <intent-filter> <action androID:name="androID.intent.action.MAIN" /> <category androID:name="androID.intent.category.LAUNCHER" /> </intent-filter> </activity> <Meta-data androID:name="com.baIDu.lbsAPI.API_KEY" androID:value="G6HPgwZdj4NCDQP8GztElLgDqGioeePR" /> <service androID:name="com.baIDu.location.f" androID:enabled="true" androID:process=":remote" /> </application></manifest>
思路过程1.先做到提前固定建立一个文件夹,以及固定文本文档。
2.实现自己编写信息并且将其写入手机,是死的信息
3.配合经纬度的获取,将经纬度信息输入到该文本文档
4.获取当时的时间并且也写入文本文档。
5.将经纬度信息以及时间糅合起来写入文本文档,实现每秒都记录位置点以及时间
6.在MainActivity当中,设计功能键,记录用户位置信息。然后先去解决从主界面跳转到记录用户位置信息,出现一个界面让用户输入存储位置时间信息的文本文档。然后点击确定就跳转到百度地图定位加记录位置的Activity
*想法:在主界面设置功能键,然后通过点击这个功能键,跳转到命名存储位置及时间信息的txt的界面,通过输入一个txt文件名来创建一个txt文件存储经度,纬度以及时间信息。再点击确定按钮,跳转到百度地图组件的页面,边定位边将信息存入手机存储。
难点及解决方法1.需要实现跳转界面跳转代码已贴,见上2.需要获取EditText中内容,并在百度地图所在的Activity中调用其String值
代码已贴,见上
因为静态成员不能直接访问非静态成员,所以在RecordActivity的方法中,需要创建实例来引用NewfileActivity当中所获取到的EditText值,并且有设置全局静态变量3.需要获取时间信息
代码已贴,见上4.需要持续将信息写入到存储当中,重点在Record的代码中
也就是writetofile()方法当中的if以及else处理,解释如下:if是判断文件是否存在,如果不存在的话需要创建这个文本文档,else即当文件存在的情况下,需要进一步往这个文件里头写入信息。5.向手机存储写入信息,在fileOperations.java当中
具体的语句功能介绍,见脑图运行演示
@H_502_227@@H_502_227@@H_502_227@ 总结
以上是内存溢出为你收集整理的Android信息写入手机之经纬度信息持续写入手机全部内容,希望文章能够帮你解决Android信息写入手机之经纬度信息持续写入手机所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)