营销型网站建设作用网站建设课程设计报告图文

news/2025/9/23 15:47:38/文章来源:
营销型网站建设作用,网站建设课程设计报告图文,全国企业信息网查询平台官网,抖音小程序是什么一、引言 我昨天写了《安卓应用开发学习#xff1a;获取经纬度及地理位置描述信息》日志#xff0c;今天再接再厉#xff0c;记录一下跟着《Android App 开发进阶与项目实战》一书#xff0c;实现获取导航卫星信息#xff0c;并在手机上显示的功能的情况。先上实现后的在… 一、引言 我昨天写了《安卓应用开发学习获取经纬度及地理位置描述信息》日志今天再接再厉记录一下跟着《Android App 开发进阶与项目实战》一书实现获取导航卫星信息并在手机上显示的功能的情况。先上实现后的在手机上搜索卫星信息的最终效果图。 二、书上相关内容 书上对全球卫星导航系统做了简单的介绍说明了获取导航卫星信息的大致方法。 随教材提供了完整的代码照着做做出来的效果如下 三、我对代码的改进 做出来后有一个问题就是在我的手机上定位类型显示的null而教材上是卫星定位。这一问题经过研究发现是我的手机上返回的Fused定位而不是作者书籍中返回的Gps定位关于这个问题的解决办法我已经在 《安卓应用开发学习获取经纬度及地理位置描述信息》一文的末尾进行的补充这里就不复述了。 另外我在网上搜了一下类似的软件界面不少界面还会显示各个类型的卫星的数量我也想显示就需要对代码进行研究和修改来实现。 我的做法是增加几个整数型变量num_china, num_america, num_russia, num_europe, num_other用于统计各个类型的卫星数量在卫星导航系统的状态变更时触发的onSatelliteStatusChanged方法中获取到卫星信息后就对卫星类别进行统计根据卫星类型代码值分别递增上面的整数型变量。类型代码的对照关系如下 0UNKNOWN; 1 GPS; 2SBAS; 3GLONASS; 4QZSS; 5BEIDOU; 6GALILEO; 7IRNSS 在完成搜星后将整数型变量中的值更新到页面中如此就得到了如下的最终效果图。 四、代码展示 最后上相关的关键代码。 1.搜星的Activity文件 src\main\java\......\SatelliteSphereActivity.java import android.Manifest; import android.annotation.SuppressLint; import android.content.Context; import android.content.pm.PackageManager; import android.location.Criteria; import android.location.GnssStatus; import android.location.GpsSatellite; import android.location.GpsStatus; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.util.Log; import android.widget.TextView; import android.widget.Toast;import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat;import com.bahamutjapp.bean.Satellite; import com.bahamutjapp.util.DateUtil; import com.bahamutjapp.util.SwitchUtil; import com.bahamutjapp.widget.CompassView;import java.util.HashMap; import java.util.Map;SuppressLint(DefaultLocale) public class SatelliteSphereActivity extends AppCompatActivity {private final static String TAG SatelliteSphereActivity;private MapString, String providerMap new HashMap(); // 定位提供者映射private TextView tv_satellite; // 声明一个文本视图对象private CompassView cv_satellite; // 声明一个罗盘视图对象private MapInteger, Satellite mapSatellite new HashMap(); // 导航卫星映射private LocationManager mLocationMgr; // 声明一个定位管理器对象private Criteria mCriteria new Criteria(); // 声明一个定位准则对象private Handler mHandler new Handler(Looper.myLooper()); // 声明一个处理器对象private boolean isLocationEnable false; // 定位服务是否可用private String mLocationType ; // 定位类型。是卫星定位还是网络定位private TextView tv_china, tv_america, tv_russia, tv_europe, tv_other; // 申明文本视图对象private int num_china, num_america, num_russia, num_europe, num_other; // 用于统计指定类型卫星数Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_satellite_sphere);providerMap.put(gps, 卫星);providerMap.put(network, 网络);providerMap.put(fused, 融合); // 我的手机经测试getBestProvider返回的fused估添加了此行tv_satellite findViewById(R.id.tv_satellite); // 显示搜索到的卫星信息和经纬度信息cv_satellite findViewById(R.id.cv_satellite); // 罗盘视图对象显示卫星分布图tv_china findViewById(R.id.tv_china); // 显示中国北斗卫星数tv_america findViewById(R.id.tv_america); // 显示美国GPS卫星数tv_russia findViewById(R.id.tv_russia); // 显示俄罗斯格洛纳斯卫星数tv_europe findViewById(R.id.tv_europe); // 显示欧洲伽利略卫星数tv_other findViewById(R.id.tv_other); // 显示其它卫星数num_china num_america num_russia num_europe num_other 0; // 指定类型卫星数量初始化SwitchUtil.checkLocationIsOpen(this, 需要打开定位功能才能查看卫星导航信息);}Overrideprotected void onResume() {super.onResume();mHandler.removeCallbacks(mRefresh); // 移除定位刷新任务initLocation(); // 初始化定位服务mHandler.postDelayed(mRefresh, 100); // 延迟100毫秒启动定位刷新任务}// 初始化定位服务private void initLocation() {// 从系统服务中获取定位管理器mLocationMgr (LocationManager) getSystemService(Context.LOCATION_SERVICE);// 定位条件器Criteria设置// 设置定位精确度 Criteria.ACCURACY_COARSE表示粗略Criteria.ACCURACY_FIN表示精细mCriteria.setAccuracy(Criteria.ACCURACY_FINE);mCriteria.setAltitudeRequired(true); // 设置是否需要海拔信息mCriteria.setBearingRequired(true); // 设置是否需要方位信息mCriteria.setCostAllowed(true); // 设置是否允许运营商收费mCriteria.setPowerRequirement(Criteria.POWER_LOW); // 设置对电源的需求// 获取定位管理器LocationManager的最佳定位提供者本人手机oppo手机返回值为fusedString bestProvider mLocationMgr.getBestProvider(mCriteria, true);if (mLocationMgr.isProviderEnabled(bestProvider)) { // 定位提供者当前可用mLocationType providerMap.get(bestProvider)定位;beginLocation(bestProvider); // 开始定位isLocationEnable true;} else { // 定位提供者暂不可用isLocationEnable false;}}// 设置定位结果文本private void showLocation(Location location) {if (location ! null) {String desc String.format(当前定位类型%s\n定位时间%s \n经度%f 纬度%f\n高度%d米 精度%d米,mLocationType, DateUtil.formatDate(location.getTime()),location.getLongitude(), location.getLatitude(),Math.round(location.getAltitude()), Math.round(location.getAccuracy()));tv_satellite.setText(desc);} else {Log.d(TAG, 暂未获取到定位对象);}}// 开始定位private void beginLocation(String method) {// 检查当前设备是否已经开启了定位功能if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) ! PackageManager.PERMISSION_GRANTED ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) ! PackageManager.PERMISSION_GRANTED) {Toast.makeText(this, 请授予定位权限并开启定位功能, Toast.LENGTH_SHORT).show();return;}// 设置定位管理器的位置变更监听器mLocationMgr.requestLocationUpdates(method, 300, 0, mLocationListener);// 获取最后一次成功定位的位置信息Location location mLocationMgr.getLastKnownLocation(method);showLocation(location); // 显示定位结果文本if (Build.VERSION.SDK_INT Build.VERSION_CODES.N) {// 注册全球导航卫星系统的状态监听器mLocationMgr.registerGnssStatusCallback(mGnssStatusListener, null);} else {// 给定位管理器添加导航状态监听器mLocationMgr.addGpsStatusListener(mStatusListener);}}private String[] mSystemArray new String[] {UNKNOWN, GPS, SBAS,GLONASS, QZSS, BEIDOU, GALILEO, IRNSS}; // 卫星类型列表RequiresApi(api Build.VERSION_CODES.N)// 定义一个GNSS状态监听器private GnssStatus.Callback mGnssStatusListener new GnssStatus.Callback() {Overridepublic void onStarted() {}Overridepublic void onStopped() {}Overridepublic void onFirstFix(int ttffMillis) {}// 在卫星导航系统的状态变更时触发Overridepublic void onSatelliteStatusChanged(GnssStatus status) {mapSatellite.clear(); // 卫星列表重置num_china num_america num_russia num_europe num_other 0; // 卫星数量重置for (int i0; istatus.getSatelliteCount(); i) {Log.d(TAG, ii,getSvidstatus.getSvid(i),getConstellationTypestatus.getConstellationType(i));Satellite item new Satellite(); // 创建一个卫星信息对象item.signal status.getCn0DbHz(i); // 获取卫星的信号item.elevation status.getElevationDegrees(i); // 获取卫星的仰角item.azimuth status.getAzimuthDegrees(i); // 获取卫星的方位角item.time DateUtil.getNowDateTime(); // 获取当前时间// systemType与卫星类型对照 0UNKNOWN; 1 GPS; 2SBAS; 3GLONASS;// 4QZSS; 5BEIDOU; 6GALILEO; 7IRNSSint systemType status.getConstellationType(i); // 获取卫星的类型item.name mSystemArray[systemType];mapSatellite.put(i, item);// 统计各类型卫星数量if (systemType 1) {num_america 1;} else if (systemType 3) {num_russia 1;} else if (systemType 5) {num_china 1;} else if (systemType 6) {num_europe 1;} else {num_other 1;}}cv_satellite.setSatelliteMap(mapSatellite); // 设置卫星浑天仪// 显示给类型的卫星数tv_china.setText(String.valueOf(num_china));tv_america.setText(String.valueOf(num_america));tv_russia.setText(String.valueOf(num_russia));tv_europe.setText(String.valueOf(num_europe));tv_other.setText(String.valueOf(num_other));}};// 定义一个位置变更监听器private LocationListener mLocationListener new LocationListener() {Overridepublic void onLocationChanged(Location location) {showLocation(location); // 显示定位结果文本}Overridepublic void onProviderDisabled(String arg0) {}Overridepublic void onProviderEnabled(String arg0) {}Overridepublic void onStatusChanged(String arg0, int arg1, Bundle arg2) {}};// 定义一个刷新任务若无法定位则每隔一秒就尝试定位private Runnable mRefresh new Runnable() {Overridepublic void run() {if (!isLocationEnable) {initLocation(); // 初始化定位服务mHandler.postDelayed(this, 1000);}}};Overrideprotected void onDestroy() {super.onDestroy();if (mLocationMgr ! null) {if (Build.VERSION.SDK_INT Build.VERSION_CODES.N) {// 注销全球导航卫星系统的状态监听器mLocationMgr.unregisterGnssStatusCallback(mGnssStatusListener);} else {// 移除定位管理器的导航状态监听器mLocationMgr.removeGpsStatusListener(mStatusListener);}// 移除定位管理器的位置变更监听器mLocationMgr.removeUpdates(mLocationListener);}}// 定义一个导航状态监听器private GpsStatus.Listener mStatusListener new GpsStatus.Listener() {// 在卫星导航系统的状态变更时触发Overridepublic void onGpsStatusChanged(int event) {if (ActivityCompat.checkSelfPermission(SatelliteSphereActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) PackageManager.PERMISSION_GRANTED) {// 获取卫星定位的状态信息GpsStatus gpsStatus mLocationMgr.getGpsStatus(null);switch (event) {case GpsStatus.GPS_EVENT_SATELLITE_STATUS: // 周期性报告卫星状态// 得到所有收到的卫星的信息包括 卫星的高度角、方位角、信噪比、和伪随机号及卫星编号IterableGpsSatellite satellites gpsStatus.getSatellites();for (GpsSatellite satellite : satellites) {/** satellite.getElevation(); //卫星的仰角 (卫星的高度)* satellite.getAzimuth(); //卫星的方位角* satellite.getSnr(); //卫星的信噪比* satellite.getPrn(); //卫星的伪随机码可以认为就是卫星的编号* satellite.hasAlmanac(); //卫星是否有年历表* satellite.hasEphemeris(); //卫星是否有星历表* satellite.usedInFix(); //卫星是否被用于近期的GPS修正计算*/Satellite item new Satellite(); // 创建一个卫星信息对象int prn_id satellite.getPrn(); // 获取卫星的编号item.signal Math.round(satellite.getSnr()); // 获取卫星的信号item.elevation Math.round(satellite.getElevation()); // 获取卫星的仰角item.azimuth Math.round(satellite.getAzimuth()); // 获取卫星的方位角item.time DateUtil.getNowDateTime(); // 获取当前时间if (prn_id 51) { // 美国的GPSitem.name GPS;} else if (prn_id 201 prn_id 235) { // 中国的北斗item.name BEIDOU;} else if (prn_id 65 prn_id 96) { // 俄罗斯的格洛纳斯item.name GLONASS;} else if (prn_id 301 prn_id 336) { // 欧洲的伽利略item.name GALILEO;} else {item.name 未知;}Log.d(TAG, idprn_id, signalitem.signal, elevationitem.elevation, azimuthitem.azimuth);mapSatellite.put(prn_id, item);}cv_satellite.setSatelliteMap(mapSatellite); // 设置卫星浑天仪case GpsStatus.GPS_EVENT_FIRST_FIX: // 首次卫星定位case GpsStatus.GPS_EVENT_STARTED: // 卫星导航服务开始case GpsStatus.GPS_EVENT_STOPPED: // 卫星导航服务停止default:break;}}}};} 2.Activity文件对应的xml文件 src\main\res\layout\activity_satellite_sphere.xml 注改文件引用的图片文件放在src\main\res\layout\drawable-xhdpi文件夹下图片文件是原书作者的劳动成果不便提供。 ?xml version1.0 encodingutf-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticaltools:context.SatelliteSphereActivityTextViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_gravitycenterandroid:paddingStart10dpandroid:paddingEnd10dpandroid:text卫星浑天仪android:textSize24spandroid:textStylebold /TextViewandroid:idid/tv_satelliteandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_marginTop20dpandroid:layout_marginBottom10dpandroid:paddingStart10dpandroid:paddingEnd10dpandroid:text卫星信息android:textSize16sp /com.bahamutjapp.widget.CompassViewandroid:idid/cv_satelliteandroid:layout_widthmatch_parentandroid:layout_heightwrap_content /GridLayoutandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_margin10dpandroid:layout_gravitycenter_horizontalandroid:columnCount5 LinearLayoutandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_margin20dpandroid:orientationvertical ImageViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_gravitycenterapp:srcCompatdrawable/satellite_china/TextViewandroid:idid/tv_chinaandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_gravitycenterandroid:text0android:textSize18spandroid:textStylebold //LinearLayoutLinearLayoutandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_margin20dpandroid:orientationvertical ImageViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_gravitycenterapp:srcCompatdrawable/satellite_america/TextViewandroid:idid/tv_americaandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_gravitycenterandroid:text0android:textSize18spandroid:textStylebold //LinearLayoutLinearLayoutandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_margin20dpandroid:orientationvertical ImageViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_gravitycenterapp:srcCompatdrawable/satellite_russia/TextViewandroid:idid/tv_russiaandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_gravitycenterandroid:text0android:textSize18spandroid:textStylebold //LinearLayoutLinearLayoutandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_margin20dpandroid:orientationvertical ImageViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_gravitycenterapp:srcCompatdrawable/satellite_europe/TextViewandroid:idid/tv_europeandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_gravitycenterandroid:text0android:textSize18spandroid:textStylebold //LinearLayoutLinearLayoutandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_margin20dpandroid:orientationvertical ImageViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_gravitycenterapp:srcCompatdrawable/satellite_other/TextViewandroid:idid/tv_otherandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_gravitycenterandroid:text0android:textSize18spandroid:textStylebold //LinearLayout/GridLayout/LinearLayout 3.自定义的罗盘组件用于显示卫星图 src\main\java\......\widget\CompassView.java import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.Path; import android.graphics.Rect; import android.graphics.RectF; import android.util.AttributeSet; import android.util.Log; import android.view.View;import com.bahamutjapp.R; import com.bahamutjapp.bean.Satellite; import com.bahamutjapp.util.Utils;import java.util.HashMap; import java.util.Map;public class CompassView extends View {private final static String TAG CompassView;private int mWidth; // 视图宽度private Paint mPaintLine; // 弧线的画笔private Paint mPaintText; // 文字的画笔private Paint mPaintAngle; // 刻度的画笔private Bitmap mCompassBg; // 背景罗盘的位图private Rect mRectSrc; // 位图的原始边界private Rect mRectDest; // 位图的目标边界private RectF mRectAngle; // 刻度的矩形边界private Bitmap mSatelliteChina; // 中国北斗卫星的图标private Bitmap mSatelliteAmerica; // 美国GPS卫星的图标private Bitmap mSatelliteRussia; // 俄罗斯格洛纳斯卫星的图标private Bitmap mSatelliteEurope; // 欧洲伽利略卫星的图标private Bitmap mSatelliteOther; // 其他国家卫星的图标private MapInteger, Satellite mapSatellite new HashMap(); // 卫星分布映射private int mScaleLength 25; // 刻度线的长度private float mBorder 0.9f; // 边界的倍率比如只在整个区域的90%内部绘图public CompassView(Context context) {this(context, null);}public CompassView(Context context, AttributeSet attr) {super(context, attr);// 以下初始化弧线的画笔mPaintLine new Paint();mPaintLine.setAntiAlias(true); // 设置抗锯齿mPaintLine.setColor(Color.GREEN); // 设置画笔的颜色mPaintLine.setStrokeWidth(2); // 设置画笔的线宽mPaintLine.setStyle(Style.STROKE); // 设置画笔的类型。STROK表示空心FILL表示实心// 以下初始化文字的画笔mPaintText new Paint();mPaintText.setAntiAlias(true); // 设置抗锯齿mPaintText.setColor(Color.RED); // 设置画笔的颜色mPaintText.setStrokeWidth(1); // 设置画笔的线宽mPaintText.setTextSize(Utils.dip2px(context, 14));// 以下初始化刻度的画笔mPaintAngle new Paint();mPaintAngle.setAntiAlias(true); // 设置抗锯齿mPaintAngle.setColor(Color.BLACK); // 设置画笔的颜色mPaintAngle.setStrokeWidth(1); // 设置画笔的线宽mPaintAngle.setTextSize(Utils.dip2px(context, 12));// 从资源图片中获取罗盘背景的位图mCompassBg BitmapFactory.decodeResource(getResources(), R.drawable.compass_bg);// 根据位图的宽高创建位图的原始边界mRectSrc new Rect(0, 0, mCompassBg.getWidth(), mCompassBg.getHeight());// 从资源图片中获取中国北斗卫星的图标mSatelliteChina BitmapFactory.decodeResource(getResources(), R.drawable.satellite_china);// 从资源图片中获取美国GPS卫星的图标mSatelliteAmerica BitmapFactory.decodeResource(getResources(), R.drawable.satellite_america);// 从资源图片中获取俄罗斯格洛纳斯卫星的图标mSatelliteRussia BitmapFactory.decodeResource(getResources(), R.drawable.satellite_russia);// 从资源图片中获取欧洲伽利略卫星的图标mSatelliteEurope BitmapFactory.decodeResource(getResources(), R.drawable.satellite_europe);// 从资源图片中获取其他国家卫星的图标mSatelliteOther BitmapFactory.decodeResource(getResources(), R.drawable.satellite_other);}// 重写onMeasure方法使得该视图无论竖屏还是横屏都保持正方形状Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int width View.MeasureSpec.getSize(widthMeasureSpec);int height View.MeasureSpec.getSize(heightMeasureSpec);mWidth getMeasuredWidth(); // 获取视图的实际宽度if (width height) { // 宽度比高度小则缩短高度使之与宽度一样长super.onMeasure(widthMeasureSpec, widthMeasureSpec);} else { // 宽度比高度大则缩短宽度使之与高度一样长super.onMeasure(heightMeasureSpec, heightMeasureSpec);}// 根据视图的宽高创建位图的目标边界mRectDest new Rect(0, 0, mWidth, mWidth);// 创建刻度的矩形边界mRectAngle new RectF(mWidth / 10, mWidth / 10, mWidth * 9 / 10, mWidth * 9 / 10);Log.d(TAG, mWidth mWidth);}Overrideprotected void dispatchDraw(Canvas canvas) {super.dispatchDraw(canvas);int radius mWidth / 2;int margin radius / 10;// 在画布上绘制罗盘背景canvas.drawBitmap(mCompassBg, mRectSrc, mRectDest, new Paint());// 以下在画布上绘制各种半径的圆圈canvas.drawCircle(radius, radius, radius * 3 / 10, mPaintLine);canvas.drawCircle(radius, radius, radius * 5 / 10, mPaintLine);canvas.drawCircle(radius, radius, radius * 7 / 10, mPaintLine);canvas.drawCircle(radius, radius, radius * 9 / 10, mPaintLine);// 在画布上绘制罗盘的中央垂直线canvas.drawLine(radius, margin, radius, mWidth - margin, mPaintLine);// 在画布上绘制罗盘的中央水平线canvas.drawLine(margin, radius, mWidth - margin, radius, mPaintLine);// 画罗盘的刻度for (int i 0; i 360; i 30) {Path path new Path(); // 创建一个路径对象path.addArc(mRectAngle, i - 3, i 3); // 往路径添加圆弧int angle (i 90) % 360;// 在画布上绘制刻度文字canvas.drawTextOnPath( angle, path, 0, 0, mPaintAngle);// 在画布上绘制刻度线条canvas.drawLine(getXpos(radius, angle, radius * mBorder),getYpos(radius, angle, radius * mBorder),getXpos(radius, angle, (radius - mScaleLength) * mBorder),getYpos(radius, angle, (radius - mScaleLength) * mBorder),mPaintAngle);}// 画卫星分布图for (Map.EntryInteger, Satellite item_map : mapSatellite.entrySet()) {Satellite item item_map.getValue();Bitmap bitmap;if (item.name.equals(BEIDOU)) { // 北斗卫星bitmap mSatelliteChina;} else if (item.name.equals(GPS) || item.name.equals(SBAS)) { // GPS卫星bitmap mSatelliteAmerica;} else if (item.name.equals(GLONASS)) { // 格洛纳斯卫星bitmap mSatelliteRussia;} else if (item.name.equals(GALILEO)) { // 伽利略卫星bitmap mSatelliteEurope;} else if (!item.name.equals()) { // 其他卫星bitmap mSatelliteOther;} else {continue;}float left getXpos(radius, item.azimuth, radius * mBorder * getCos(item.elevation));float top getYpos(radius, item.azimuth, radius * mBorder * getCos(item.elevation));// 在画布上绘制卫星图标canvas.drawBitmap(bitmap, left - bitmap.getWidth() / 2,top - bitmap.getHeight() / 2, new Paint());}canvas.drawText(北, radius - 15, margin - 15, mPaintText);}// 根据半径、角度、线长计算该点的横坐标private float getXpos(int radius, float angle, double length) {return (float) (radius getCos(angle) * length);}// 根据半径、角度、线长计算该点的纵坐标private float getYpos(int radius, float angle, double length) {return (float) (radius getSin(angle) * length);}// 获得指定角度的正弦值private double getSin(float angle) {return Math.sin(Math.PI * angle / 180.0);}// 获得指定角度的余弦值private double getCos(float angle) {return Math.cos(Math.PI * angle / 180.0);}// 设置卫星分布映射用于卫星浑天仪public void setSatelliteMap(MapInteger, Satellite map) {mapSatellite map;postInvalidate(); // 立即刷新视图线程安全方式}} 4.卫星信息的对象 src\main\java\......\bean\Satellite.java public class Satellite {public String name; // 卫星导航系统的名称public float signal; // 卫星的信噪比信号public float elevation; // 卫星的仰角public float azimuth; // 卫星的方位角public String time; // 当前时间public Satellite() {name ;signal -1;elevation -1;azimuth -1;time ;} }5.SwitchUtil.java文件获取定位功能开关状态 src\main\java\......\util\SwitchUtil.java import android.content.Context; import android.content.Intent; import android.location.LocationManager; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiManager; import android.provider.Settings; import android.telephony.TelephonyManager; import android.util.Log; import android.widget.Toast;import java.lang.reflect.Method;public class SwitchUtil {private static final String TAG SwitchUtil;// 获取定位功能的开关状态public static boolean getLocationStatus(Context ctx) {// 从系统服务中获取定位管理器LocationManager lm (LocationManager) ctx.getSystemService(Context.LOCATION_SERVICE);return lm.isProviderEnabled(LocationManager.GPS_PROVIDER);}// 检查定位功能是否打开若未打开则跳到系统的定位功能设置页面public static void checkLocationIsOpen(Context ctx, String hint) {if (!getLocationStatus(ctx)) {Toast.makeText(ctx, hint, Toast.LENGTH_SHORT).show();Intent intent new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);ctx.startActivity(intent);}}}6. DateUtil.java文件对日期数据进行格式化 src\main\java\......\util\DateUtil.java import android.annotation.SuppressLint;import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date;SuppressLint(SimpleDateFormat) public class DateUtil {// 获取当前的日期时间public static String getNowDateTime() {SimpleDateFormat sdf new SimpleDateFormat(yyyyMMddHHmmss);return sdf.format(new Date());}// 将长整型的时间数值格式化为日期时间字符串public static String formatDate(long time) {Date date new Date(time);SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);return sdf.format(date);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

环保类网站建设电商网站建设成本

对于本题 我感觉还是链表做起来舒服 数组也可以做 但是数组需要去控制循环 不太好控制 我之前搞了 最后看别人的实现 但是链表搞了一次就搞好了 香的嘞~ 下面是代码 用单链表实现循环 再去删除要删除的人 5个人 数到2 你们在纸上画图 我就不画了 对于数组实现你们可以去…

网站建设 广州佛山市北区小型网页设计培训

前言 最近工作比较忙,没怎么记录东西了。Android的Handler重要性不必赘述,之前也写过几篇关于hanlder的文章了: Handler有多深?连环二十七问Android多线程:深入分析 Handler机制源码(二) And…

洛谷P10288 [GESP样题 八级] 区间

原题 题目描述 小杨有一个长度为 \(n\) 的正整数序列 \(A\)。 小杨有 \(q\) 次询问。第 \(i\) 次(\(1\le i\le q\))询问时,小杨会给出 \(l_i,r_i,x_i\),请你求出 \(x_i\) 在 \(A_{l_i}, A_{l_i+1}, \dots A_{r_i}\…

百度如何搜索网址网站推广优化趋势

1. nuScenes 数据集 1.1 概述 nuScenes 数据集 (pronounced /nu:ːsiː:nz/) 是由 Motional (以前称为 nuTonomy) 团队开发的自动驾驶公共大型数据集。nuScenes 数据集的灵感来自于开创性的 KITTI 数据集。 nuScenes 是第一个提供自动驾驶车辆整个传感器套件 (6 个摄像头、1 …

AI 时代下,开发流程的重塑:从“代码先行”到“文档驱动”

本文探讨了AI编程工具在提升效率的同时,因缺乏顶层设计而导致项目混乱的困境。并提出一种“文档驱动”的AI原生开发新范式,强调高质量、结构化的文档是驾驭AI编码,实现高质量交付的关键。文章标题 引言:AI 编程工具…

P13617 [ICPC 2025 APC] Bit Counting Sequenc

题意:给定长度 $n \leq 5 \times 10^5$ 的 popcount 序列 $\{a_i\}$,求其对应的原序列。思路:观察发现 popcount 序列具有倍增构造性质,将原序列 $[0,2^k - 1]$ 的第 $k$ 位改成 $1$ 可得到 $[2^k,2^{k + 1} - 1]$…

perl -MCPAN -e install GD;

001、 Package gdlib was not found in the pkg-config search path.Perhaps you should add the directory containing `gdlib.pcto the PKG_CONFIG_PATH environment variableNo package gdlib found

Day 02 HTML的基础 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

如何在网站添加代码大气精美网站设计工作室织梦模板

【芯片DFX】万字长文带你搞懂JTAG的门门道道【芯片DFX】ARM:CoreSight、ETM、PTM、ITM、HTM、ETB等常用术语解析

网络建站的费用微网站开发一般费用多少钱

Navicat Premium(16.3.3 Windows 版或以上)正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结…

什么网站专做店铺wordpress 一栏主题

首先已经创建好了 Vue 框架,安装好了 node.js。 没有完成的可按照此博客搭建:搭建Vue项目 之后打开终端,使用命令。 1、命令安装 axios 和 vue-axios npm install axios --save npm install vue-axios --save2、package.json 查看版本 在 p…

做静态网站的步骤怎么下载网页视频到本地

一、类型转换 C语言中的类型转换比较松散,C新增4个类型转换运算符,更加严格的显示类型转换,使转换的效率更加规范 1、static_cast static_cast,用于仅在编译时检查的强制转换。 如果编译器检测到你尝试在完全不兼容的类型之间强制…

微信公众号手机网站做网站有哪些需求

在工作中,偶尔看到有些机器的网口名字是以ethX命令,有些则以enpXsX这种名字命名。网上的资料说的都不太明白,资料也无据可查,很难让人信服。于是决定自己查了下官方的资料和源码,把这些搞清楚。 官方文档:Predictable…

P3959 [NOIP 2017 提高组] 宝藏 题解

link 题目要求任选图中一点为根,通过拓展道路最终形成一棵树,使得代价总和最小,代价受深度和边权两个因素影响。 容易想到一种爆搜,任选一点为根,每次扫描已选点来不断尝试拓展道路,但这样做太蛋疼了,我们尝试优…

(二)若依前后端分离版本二次开发 代码生成、目录添加、数据字典维护

(二)若依前后端分离版本二次开发 代码生成、目录添加、数据字典维护一 摘要 主要介绍添加目录、菜单、代码自动生成等功能。 二 目标 2.1 掌握添加目录,菜单 2.2 掌握添加数据字典 2.3 掌握代码生成 三 实施 已标签…

C#与Access数据库操作简易指南:增删改查及类封装

简介:C#是面向对象的编程语言,常用于Windows应用开发,而Microsoft Access是一种数据库管理系统。本教程指导如何结合C#操作Access数据库进行基本的增删改查(CRUD)操作,使用ADO.NET通过OLEDB类连接和操作数据库。…

对之前部署hbase总结

部署路程为看黑马大数据视频 部署直到yarn集群部署之后看尚硅谷的视频完成部署即可 之后参考有可能会报错直接复制报错到csdn即可 启动代码和停止指令: 注意每次启动检查每一个主机启动是否完成 慢一些 否则会报错

网站排版图片网站禁止右键

一、前言 在大多数传统的web系统中,使用Redis一般都是作为缓存使用,在大数据查询时作为缓解性能的一种解决方案。博主的的系统中使用Redis也主要使用到缓存的作用,还有做了注册中心,分布式事务。其他的强大的功能,没有…

书画工作室网站模板网站建设做vip视频网站赚钱吗

在K8s中,创建Pod时的流程如下: 用户通过Kubectl或其他方式向API Server发送创建Pod的请求。API Server接收到请求后,会先进行权限验证和身份认证。一旦验证通过,API Server会将请求转发给Scheduler组件。Scheduler负责对新创建的…