主頁 >  其他 > Android Google Map開發指南(三)百度地圖、谷歌地圖自如切換

Android Google Map開發指南(三)百度地圖、谷歌地圖自如切換

2020-10-28 12:35:03 其他

如果你是剛開始接觸谷歌地圖的話,推薦你先看一下文章:

Android Google Map 開發指南(一)解決官方demo顯示空白只展示google logo問題

Android Google Map開發指南(二) 處理批量生成Marker點(添加大量標記點)記憶體消耗問題
如果你剛接觸百度地圖的話,推薦你可以看一下:

Android百度地圖SDK最新詳細使用(包含demo)

目錄

  • 實作前準備
  • 一個小demo
  • 接入思路
  • 實作程序

廢話不多說,先來一波效果圖:

在這里插入圖片描述

實作前準備

要實作到這一步,就需要分別拿到google APIKEY 和 百度的APIKEY然后在你的應用中進行配置,google地圖和百度地圖的詳細接入方法就在上面的文章中,當然你也可以去看看他們的官方檔案,系統的學習,
好,那直接進入主題

一個小demo

為了減少我們在一個頁面中進行兩種地圖的切換代碼和兼容性考慮,我們這邊不建議使用SupportMapFragment 的方式來顯示google地圖 ,這里強烈推薦使用goole提供的實體化MapView的方式來載入google地圖
使用也非常簡單,直接來看代碼:

public class SecondActivity extends AppCompatActivity implements OnMapReadyCallback {
    private MapView mMapView;

    private static final String MAPVIEW_BUNDLE_KEY = "MapViewBundleKey";

    @Override
    protected void onCreate( Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        GoogleMapOptions options = new GoogleMapOptions();
//        //設定地圖模式為衛星地圖
        options.mapType(GoogleMap.MAP_TYPE_NORMAL);
        options.zoomControlsEnabled(true);

        mMapView = new MapView(this, options);
        setContentView(mMapView);
        mMapView.onCreate(null);
        mMapView.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap map) {
        double lat = 39.937795;
        double lng = 116.387224;
        LatLng appointLoc = new LatLng(lat, lng);

        map.addMarker(new MarkerOptions().position(appointLoc).title("Marker"));
        map.moveCamera(CameraUpdateFactory.newLatLng(appointLoc));
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        Bundle mapViewBundle = outState.getBundle(MAPVIEW_BUNDLE_KEY);
        if (mapViewBundle == null) {
            mapViewBundle = new Bundle();
            outState.putBundle(MAPVIEW_BUNDLE_KEY, mapViewBundle);
        }

        mMapView.onSaveInstanceState(mapViewBundle);
    }

    @Override
    protected void onResume() {
        super.onResume();
        mMapView.onResume();
    }

    @Override
    protected void onStart() {
        super.onStart();
        mMapView.onStart();
    }

    @Override
    protected void onStop() {
        super.onStop();
        mMapView.onStop();
    }



    @Override
    protected void onPause() {
        mMapView.onPause();
        super.onPause();
    }

    @Override
    protected void onDestroy() {
        mMapView.onDestroy();
        super.onDestroy();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        mMapView.onLowMemory();
    }
}

代碼就這么多 來看效果圖(記得在Manifest檔案中將APIKEY進行配置)
在這里插入圖片描述

這里有個坑MapView生命周期注冊非常重要,如果不設定生命周期一運行顯示空白,只顯示logo

接入思路

我這里同時接入是先實體化google的MapView和百度地圖的Mapview,然后將它們放入我當前activity所對應布局中的指定父容器中,先都設定visible為gone,然后根據獲取SharedPreferences中我指定的變數,默認加載上一次用戶退出時使用的是google地圖還是百度地圖,當用戶點擊地圖切換的圖示時,可以對當前頁面要顯示的地圖進行切換,這時設定選中的所對應的地圖的visible為可見,這樣我們在切換地圖時就不會出現卡頓或突然黑一下螢屏的情況,提高用戶體驗,最后將新的變數值存盤到SharedPreferences中方便下次呼叫

實作程序

public class MapStartActivity extends AppCompatActivity implements OnMapReadyCallback {


    private MapView mMapView = null;
    private com.google.android.gms.maps.MapView googleMap = null;
    private BaiduMap mBaiduMap;
    private LocationClient mLocationClient;
    private double startwei;
    private double startjing;
    private double mMBeiwei;
    private double mDongjing;
    private Boolean isfirstLocate = true;
    private BitmapDescriptor mDefaultBitmap;
    private LatLngBounds latlngBounds;
    private String[] str = {"全部", "報警", "運行","停機","離線"};
    private ImageView mapType;
    private LinearLayout clickContainer,deviceMapWhere;
    private LinearLayout mapContainer;
    private TranslateAnimation translateAniShow, translateAniHide;
    private AlphaAnimation alphaAniShow, alphaAniHide;
    String addressStr = "no address \n";
    private TextView address;
    private LatLng myLatLng;
    private LatLng endLatLng;
    private MapSwitch mapSwitch;
    private SharedPreferences sharedPreferences;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map_show);
        //對于布局中其他的控制元件及影片進行初始化
        mapSwitch = new MapSwitch();
        mapContainer = findViewById(R.id.view_container);
        mapType = findViewById(R.id.device_map_type);
        //初始化
        initView();
        initLanguage();
    }
    //先初始化goole/baidu 地圖
    private void initView() {
        mapContainer.removeAllViews();
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        //layoutParams.gravity = Gravity.CENTER_HORIZONTAL;

        //百度地圖初始化
        BaiduMapOptions options = new BaiduMapOptions();
        //設定地圖模式為衛星地圖
        options.mapType(BaiduMap.MAP_TYPE_NORMAL);
        //縮放控制元件/比例尺 顯示出來
        options.zoomControlsEnabled(true);
        options.scaleControlEnabled(true);

        mMapView = new MapView(this, options);
        mMapView.setLayoutParams(layoutParams);
        mMapView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
        mapContainer.addView(mMapView);

        mMapView.setVisibility(View.GONE);

        mBaiduMap = mMapView.getMap();
        //顯示衛星圖層
        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
        //開啟定位圖層
        mBaiduMap.setMyLocationEnabled(true);
        //指南針打開
        mBaiduMap.getUiSettings().setCompassEnabled(true);


        //縮放按鈕
        mMapView.showZoomControls(true);

        //TODO:: 設定我的位置圖層出現

        //定位初始化
        mLocationClient = new LocationClient(this);
        //通過LocationClientOption設定LocationClient相關引數
        LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true); // 打開gps
        option.setCoorType("bd09ll"); // 設定坐標型別
        option.setScanSpan(1000);
        //設定locationClientOption
        mLocationClient.setLocOption(option);
        //注冊LocationListener監聽器
        MyLocationListener myLocationListener = new MyLocationListener();
        mLocationClient.registerLocationListener(myLocationListener);
        //開啟地圖定位圖層
        mLocationClient.start();
        //google地圖初始化

        GoogleMapOptions optionAction = new GoogleMapOptions();
        //設定地圖模式為衛星地圖
        optionAction.mapType(GoogleMap.MAP_TYPE_NORMAL);
        optionAction.zoomControlsEnabled(true);
        googleMap = new com.google.android.gms.maps.MapView(this,optionAction);
        googleMap.setLayoutParams(layoutParams);
        mapContainer.addView(googleMap);
        googleMap.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
        googleMap.setVisibility(View.GONE);
        googleMap.onCreate(null);
        googleMap.getMapAsync(this);
    }

    private void initLanguage() {
        //獲取表
        sharedPreferences = getSharedPreferences(Contast.TABLE_TABLE, MODE_PRIVATE);
        String mapType = sharedPreferences.getString(Contast.TABLE_MAPTYPE, "");
        if(mapType.equals("")){
            String language = sharedPreferences.getString(Contast.TABLE_LANGUAGE, "");
            if(!language.equals("")){
                if(language.equals("EN")){
                    mapType = "outland";
                }else {
                    mapType = "inland";
                }
            }else {
                mapType = "inland";
            }
        }

        init(mapType);
        //設定單選框選中
        mapSwitch.setMapClick(mapType);
        commitMethod(mapType);
    }

    private void commitMethod(String mapType) {
        SharedPreferences.Editor  editor = sharedPreferences.edit();
        editor.putString(Contast.TABLE_MAPTYPE, mapType);
        editor.apply();
    }

    


    private void updateWithNewLocation(LatLng latLng) {//獲取相關位置資訊

        String coordinate;

        if (latLng != null) {
            mMBeiwei = latLng.latitude -0.004;
            mDongjing = latLng.longitude - 0.01;
            coordinate = "Latitude:" + mMBeiwei + "\nLongitude:" + mDongjing;
            Geocoder geocoder = new Geocoder(this, Locale.getDefault());
            try {
                List<Address> addresses = geocoder.getFromLocation(mMBeiwei,
                        mDongjing, 1);
                StringBuilder sb = new StringBuilder();
                if (addresses.size() > 0) {
                    Address address = addresses.get(0);
                    for (int i = 0; i < address.getMaxAddressLineIndex(); i++) {
                        sb.append(address.getAddressLine(i)).append(" ");
                    }
                    sb.append(address.getLocality()).append(" ");
                    Log.i("location", "address.getLocality()==" + address.getLocality());//城市名

                    sb.append(address.getSubLocality());
                    Log.i("location", "address.getSubLocality()=2=" + address.getSubLocality());//---區名


                    Log.i("location","all"+addressStr);
                    Log.i("location", "address.getSubLocality()=3=" + address.getAddressLine(0) + "");//---區名
                    //addressStr = sb.toString();
                    addressStr= address.getAddressLine(0) + "";
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            //如果用戶沒有允許app訪問位置資訊 則默認取上海松江經緯度的資料
            /*lat = 39.25631486;
            lng = 115.63478961;*/
            coordinate = "no coordinate!\n";
        }
        Log.i("location", "經緯度為===" + coordinate);
        Log.i("location", "地址為====" + addressStr);

    }
   //開始切換地圖
    private void init(String mapType) {


        this.mapType.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mapSwitch.showAtLocation(clickContainer, Gravity.BOTTOM,0,0);
            }
        });
        //地圖選擇
        mapSwitch.setOnMapSelectedListener(new MapSwitch.onMapSelectedListener() {
            @Override
            public void onGoogleMapSelected() {
                googleMap.setVisibility(View.VISIBLE);
                mMapView.setVisibility(View.GONE);
                commitMethod("outland");
                mapSwitch.dismiss();
            }

            @Override
            public void onBaiduMapSelected() {
                googleMap.setVisibility(View.GONE);
                mMapView.setVisibility(View.VISIBLE);
                commitMethod("inland");
                mapSwitch.dismiss();
            }
        });
      
    }


    @Override
    public void onMapReady(GoogleMap googleMap) {
        double lat = 39.937795;
        double lng = 116.387224;
        com.google.android.gms.maps.model.LatLng appointLoc = new com.google.android.gms.maps.model.LatLng(lat, lng);

        googleMap.addMarker(new com.google.android.gms.maps.model.MarkerOptions().position(appointLoc).title("Marker"));
        googleMap.moveCamera(CameraUpdateFactory.newLatLng(appointLoc));
    }

    public class MyLocationListener extends BDAbstractLocationListener {
        @Override
        public void onReceiveLocation(BDLocation location) {
            //mapView 銷毀后不在處理新接收的位置
            if (location == null || mMapView == null){
                return;
            }

            //移動到指定位置
            navagitto(location);
            startwei = location.getLatitude();
            startjing = location.getLongitude();
            MyLocationData locData = new MyLocationData.Builder()
                    .accuracy(location.getRadius())
                    // 此處設定開發者獲取到的方向資訊,順時針0-360
                    .direction(location.getDirection()).latitude(location.getLatitude())
                    .longitude(location.getLongitude()).build();

            mBaiduMap.setMyLocationData(locData);
        }
    }


    //移動到指定位置
    private void navagitto(BDLocation location) {
        if(isfirstLocate){
            // mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(new MapStatus.Builder().zoom(5).build()));//設定縮放級別
            //更新到指定的經緯度
            myLatLng = new LatLng(location.getLatitude(),location.getLongitude());
            MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(myLatLng);

            mBaiduMap.animateMapStatus(update);
            //設定縮放值
            update = MapStatusUpdateFactory.zoomTo(6f);
            mBaiduMap.animateMapStatus(update);
            isfirstLocate = false;

        }
    }


    @Override
    protected void onResume() {
        super.onResume();
        if(mMapView!=null){
            mMapView.onResume();
        }
        if(googleMap!=null){
            googleMap.onResume();
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        if(googleMap!=null){
            googleMap.onStart();
        }
    }

    @Override
    protected void onStop() {
        super.onStop();
        if(googleMap!=null){
            googleMap.onStop();
        }
    }



    @Override
    protected void onPause() {
        if(mMapView!=null){
            mMapView.onPause();
        }
        if(googleMap!=null){
            googleMap.onPause();
        }
        super.onPause();
    }

    @Override
    protected void onDestroy() {
        if(mMapView!=null){
            mMapView.onDestroy();
        }
        if(googleMap!=null){
            googleMap.onDestroy();
        }
        super.onDestroy();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        if(googleMap!=null){
            googleMap.onLowMemory();
        }
    }
}

activity_map_show.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"
    android:orientation="vertical"
    tools:context=".activity.MapStartActivity">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp">
        <ImageView
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:src="@drawable/back"
            android:layout_centerVertical="true"
            android:layout_marginLeft="20dp"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="地圖查看"
            android:textSize="18sp"
            android:textColor="#515151"
            android:layout_centerInParent="true"

            />
        <ImageView
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:src="@drawable/search_dark"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="20dp"

            />
    </RelativeLayout>
    <com.google.android.material.tabs.TabLayout
        android:id="@+id/map_tab_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabSelectedTextColor="@color/colorBlue"
        app:tabRippleColor="@color/colorWhiteGray"
        app:tabTextColor="@color/colorGray"
        app:tabIndicatorColor="@color/colorBlue"
        app:tabMode="fixed"
        />
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
        <LinearLayout
            android:gravity="center"
            android:orientation="vertical"
            android:id="@+id/view_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:clickable="true"
            >
        </LinearLayout>
        
      <ImageView
          android:id="@+id/device_map_type"
          android:layout_alignParentBottom="true"
          android:layout_width="40dp"
          android:layout_height="40dp"
          android:background="@drawable/shape_map_img"
          android:src="@drawable/map_change"
          android:padding="10dp"
          android:layout_marginLeft="10dp"
          android:layout_marginBottom="60dp"
          />
    </RelativeLayout>
</LinearLayout>

MapSwitch.class

package com.example.smartgencloud.custom;

import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.PopupWindow;
import android.widget.RadioButton;
import android.widget.RadioGroup;

import com.example.smartgencloud.R;
import com.example.smartgencloud.base.BaseApplication;

public class MapSwitch extends PopupWindow {

    private final View inflate;
    private RadioButton google,baidu;
    private RadioGroup group;
    private onMapSelectedListener mapListener = null;
    public MapSwitch(){
        super(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
        //這里要注意設定setOutsideTouchable之前要設定 setBackgroundDrawable()
        //否則點擊外部無法關閉pop
        //setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        setOutsideTouchable(true);
        setFocusable(true);
        inflate = LayoutInflater.from(BaseApplication.getAppContext()).inflate(R.layout.mark_click_pop, null);
        setContentView(inflate);

        //設定視窗進入和退出的影片
        setAnimationStyle(R.style.pop_animation);
        initView();

        initEvent();
    }

    private void initView() {
        group = inflate.findViewById(R.id.group);
        google = inflate.findViewById(R.id.group_google);
        baidu = inflate.findViewById(R.id.group_baidu);
    }

    public void setMapClick(String type){
        if(type.equals("inland")){
            baidu.setChecked(true);
        }else {
            google.setChecked(true);
        }
    }

    private void initEvent() {
        //單選按鈕被選中后  將事件交由mapstart頁面進行地圖切換處理
        group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if(mapListener!=null){
                    switch (checkedId){
                        case R.id.group_google:
                            mapListener.onGoogleMapSelected();
                            break;
                        case R.id.group_baidu:
                            mapListener.onBaiduMapSelected();
                            break;
                    }
                }
            }
        });
    }

    public void setOnMapSelectedListener(onMapSelectedListener listener){
        mapListener = listener;
    }

    public interface onMapSelectedListener{
        void onGoogleMapSelected();
        void onBaiduMapSelected();
    }
}

mark_click_pop.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:background="@color/white"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:gravity="center"
        android:text="@string/choose_map"
        />
    <RadioGroup
        android:id="@+id/group"
        android:gravity="center"
        android:drawableRight="@drawable/empty"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        >
      <View
          android:layout_width="match_parent"
          android:layout_height="1dp"
          android:background="@color/colorUnline"
          />

    <RadioButton
        android:id="@+id/group_google"
        android:background="@color/white"
        android:drawableRight="@drawable/select_radiobutton_img"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:button="@null"
        android:padding="10dp"
        android:textColor="@drawable/select_radiobutton_bg"
        android:text="@string/map_google"
        />
      <View
          android:layout_width="match_parent"
          android:layout_height="1dp"
          android:background="@color/colorUnline"
          />
      <RadioButton
          android:id="@+id/group_baidu"
          android:background="@color/white"
          android:padding="10dp"
          android:button="@null"
          android:textColor="@drawable/select_radiobutton_bg"
          android:drawableRight="@drawable/select_radiobutton_img"
          android:text="@string/map_baidu"
          android:layout_width="match_parent"
          android:layout_height="0dp"
          android:layout_weight="1"
          />

    </RadioGroup>
</LinearLayout>

style.xml

 <style name="pop_animation" parent="android:Animation">
        <item name="android:windowEnterAnimation">@anim/pop_in</item>
        <item name="android:windowExitAnimation">@anim/pop_out</item>
    </style>

pop_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
   <translate android:fromYDelta="100%"
              android:duration = "300"
              android:toYDelta="0"/>
    <alpha
        android:fromAlpha="0.8"
        android:duration = "300"
        android:toAlpha="1.0"/>
</set>

pop_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
   <translate android:fromYDelta="0"
              android:duration = "300"
              android:toYDelta="100%"/>
   <alpha
       android:fromAlpha="1.0"
       android:duration = "300"
       android:toAlpha="0.8"/>
</set>

ok,到這里就結束了 有什么問題可以下面評論或者私信我,這邊第一時間看到會及時回復你的喲

看都看到這里啦 ,請點贊支持一下啦 謝謝

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/195103.html

標籤:AI

上一篇:【appium】appium自動化入門之元素篇

下一篇:Android 簡單的webSocket長連接

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more