【Android】用Android写个获取你位置的APP

先进行百度开发平台的注册

1.先百度搜索百度地图开放平台

2.选择开发文档--> Android地图SDK

3.点击获取密钥

登录,通过百度App完成个人实名认证

点击创建应用 

输入应用名,类型选择Android-SDK

下面的信息也要填

Android studio 创建项目,完成创建在下面

2. 输入命令行和密码,即可获取SHA1等信息;

命令行:keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey (注意目录选择、开发版本、发布版本等问题)

密码:原始密码一般为android,开发者根据实际情况填写。

3使用 keytool(jdk自带工具)获取

1. 运行进入控制台

Windows:运行 -> 输入cmd -> 确定。

Mac:直接打开 终端。

2. 在控制台内,定位到.android文件夹,输入cd .android

Windows与Mac操作一致,如下截图为Mac效果。

3. 输入命令行和密码,获取SHA1等信息

命令行:keytool -list -v -keystore debug.keystore;

密码:原始密码一般为android,开发者根据实际情况填写。

注意:

调试版本使用 debug.keystore,命令为:keytool -list -v -keystore debug.keystore。 发布版本使用 apk 对应的 keystore,命令为:keytool -list -v -keystore apk 的 keystore。 

把SHA1等信息填完之后,提交

复制完,在AndroidManifest.xml中输入下面代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.map">
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

    <application
        android:name=".DemoApplication"
        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/Theme.Map">
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="Te84yrG7nmoBu92cHOaHPc7O1n2lGfTV"
            />
        <service android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote"/>

        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 在百度地图开发者平台下载Android SDK并解压

下载完解压

把这些东西复制到

在build.gradle文件中android块中配置sourceSets标签等

plugins {
    id 'com.android.application'
}

android {
    compileSdk 32
    sourceSets {
        main {
            jniLibs.srcDir 'libs'
        }
    }

    defaultConfig {
        applicationId "com.example.map"
        minSdk 23
        targetSdk 32
        versionCode 1
        versionName "1.0"
        ndk {
// 设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so)
            abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86","x86_64"
        }

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }


    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
    implementation files('libs/BaiduLBS_Android.jar')
}

创建一个Java类

DemoApplication.java
package com.example.map;

import android.app.Application;
import com.baidu.mapapi.CoordType;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.common.BaiduMapSDKException;

public class DemoApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        SDKInitializer.setAgreePrivacy(getApplicationContext(),true);
        try {
// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext
            SDKInitializer.initialize(getApplicationContext());
        } catch (BaiduMapSDKException e) {
            e.printStackTrace();
        }
// //在使用SDK各组件之前初始化context信息,传入ApplicationContext
// SDKInitializer.initialize(getApplicationContext());
//自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
//包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
        SDKInitializer.setCoordType(CoordType.BD09LL);
    }
}

 在布局文件中activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <com.baidu.mapapi.map.TextureMapView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/map1"
        android:clickable="true"/>
</LinearLayout>

 在main.Java

package com.example.map;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.common.BaiduMapSDKException;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.TextureMapView;
import com.baidu.mapapi.model.LatLng;
public class MainActivity extends AppCompatActivity {
    private TextureMapView mMapView = null;
    private BaiduMap mBaiduMap = null;
    private LocationClient mLocationClient = null;
    private boolean isFirstLogin = true;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        requestPermission();
        LocationClient.setAgreePrivacy(true);
// java
// 是否同意隐私政策,默认为false
        SDKInitializer.setAgreePrivacy(getApplicationContext(), true);
        try {
// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext
            SDKInitializer.initialize(getApplicationContext());
        } catch (BaiduMapSDKException e) {
        }
//获取地图控件引用
        mMapView = findViewById(R.id.map1);
        mBaiduMap = mMapView.getMap();
//显示卫星图层
        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
//开启地图的定位图层
        mBaiduMap.setMyLocationEnabled(true);
        System.out.println("<<<<<<<<<<<<<,");

//定位初始化
        try {
            mLocationClient = new LocationClient(getApplicationContext());
        } catch (Exception e) {
            e.printStackTrace();
        }
//通过LocationClientOption设置LocationClient相关参数
        LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true); // 打开gps
        option.setCoorType("bd09ll"); // 设置坐标类型
        option.setScanSpan(1000);
//设置locationClientOption
        mLocationClient.setLocOption(option);
        System.out.println("=================");
//注册LocationListener监听器
        MyLocationListener myLocationListener = new MyLocationListener();
        mLocationClient.registerLocationListener(myLocationListener);
//开启地图定位图层
        mLocationClient.start();
    }
    public class MyLocationListener extends BDAbstractLocationListener {
        @Override
        public void onReceiveLocation(BDLocation location) {
//mapView 销毁后不在处理新接收的位置
            if (location == null || mMapView == null) {
                return;
            }
            if (isFirstLogin) {
                LatLng latLng = new LatLng(location.getLatitude(),
                        location.getLongitude());
                MapStatusUpdate mapStatusUpdate =
                        MapStatusUpdateFactory.newLatLng(latLng);
                mBaiduMap.animateMapStatus(mapStatusUpdate);
                isFirstLogin = false;
            }
            MyLocationData locData = new MyLocationData.Builder()
                    .accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
                    .direction(location.getDirection()).latitude(location.getLatitude())
                    .longitude(location.getLongitude()).build();
            Log.i("经纬度",String.valueOf(locData.latitude));
            Log.i("经纬度",String.valueOf(locData.longitude));
            Log.i("方向",String.valueOf(locData.direction));
            Log.i("精确度",String.valueOf(locData.accuracy));
            mBaiduMap.setMyLocationData(locData);
        }
    }
    private void requestPermission() {
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                && ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
                && ContextCompat.checkSelfPermission(this,
                Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
                && ContextCompat.checkSelfPermission(this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
                PackageManager.PERMISSION_GRANTED) {
            System.out.println("-------------");
            ActivityCompat.requestPermissions(this, new String[]
                    {Manifest.permission.ACCESS_FINE_LOCATION,
                            Manifest.permission.ACCESS_COARSE_LOCATION,
                            Manifest.permission.READ_EXTERNAL_STORAGE,
                            Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);
        }
    }
    @Override
    protected void onResume() {
        super.onResume();
//在activity执行onResume时必须调用mMapView. onResume ()
        mMapView.onResume();
    }
    @Override
    protected void onPause() {
        super.onPause();
//在activity执行onPause时必须调用mMapView. onPause ()
        mMapView.onPause();
    }
    @Override
    protected void onDestroy() {
        mLocationClient.stop();
        mBaiduMap.setMyLocationEnabled(false);
        mMapView.onDestroy();
        mMapView = null;
        super.onDestroy();
    }
}

这段代码可能报错

<com.baidu.mapapi.map.TextureMapView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/map1"
        android:clickable="true"/>

在配置文件中把

<meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="Te84yrG7nmoBu92cHOaHPc7O1n2lGfTV"
            />
        <service android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote"/>

把上面报错解决就这个项目没事了,运行把,少年

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
好的,下面是一个简单的 Android 计算器 App 的实现步骤: 1. 创建一个新的 Android Studio 项目并选择空白 Activity 模板; 2. 在布局文件中添加一个 TextView 用于显示计算结果,以及若干个 Button 用于输入数字和运算符; 3. 在 MainActivity 类中获取 TextView 和 Button 的引用,并为每个 Button 添加点击事件监听器; 4. 在点击事件监听器中根据输入的数字和运算符更新计算结果,并将结果显示在 TextView 中; 5. 实现计算逻辑,可以使用 Java 自带的数学库或自己实现计算方法; 6. 测试 App 是否正常运行并正确计算。 以下是一个简单的示例代码,仅供参考: MainActivity.java ``` import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView resultTextView; private double operand1 = Double.NaN; private double operand2 = Double.NaN; private String operator = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); resultTextView = findViewById(R.id.resultTextView); Button button0 = findViewById(R.id.button0); Button button1 = findViewById(R.id.button1); Button button2 = findViewById(R.id.button2); Button button3 = findViewById(R.id.button3); Button button4 = findViewById(R.id.button4); Button button5 = findViewById(R.id.button5); Button button6 = findViewById(R.id.button6); Button button7 = findViewById(R.id.button7); Button button8 = findViewById(R.id.button8); Button button9 = findViewById(R.id.button9); Button buttonDot = findViewById(R.id.buttonDot); Button buttonAdd = findViewById(R.id.buttonAdd); Button buttonSubtract = findViewById(R.id.buttonSubtract); Button buttonMultiply = findViewById(R.id.buttonMultiply); Button buttonDivide = findViewById(R.id.buttonDivide); Button buttonEquals = findViewById(R.id.buttonEquals); Button buttonClear = findViewById(R.id.buttonClear); button0.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { updateResultTextView("0"); } }); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { updateResultTextView("1"); } }); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { updateResultTextView("2"); } }); button3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { updateResultTextView("3"); } }); button4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { updateResultTextView("4"); } }); button5.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { updateResultTextView("5"); } }); button6.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { updateResultTextView("6"); } }); button7.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { updateResultTextView("7"); } }); button8.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { updateResultTextView("8"); } }); button9.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { updateResultTextView("9"); } }); buttonDot.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!resultTextView.getText().toString().contains(".")) { updateResultTextView("."); } } }); buttonAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { performOperation("+"); } }); buttonSubtract.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { performOperation("-"); } }); buttonMultiply.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { performOperation("*"); } }); buttonDivide.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { performOperation("/"); } }); buttonEquals.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { performOperation("="); } }); buttonClear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { operand1 = Double.NaN; operand2 = Double.NaN; operator = ""; resultTextView.setText(""); } }); } private void updateResultTextView(String text) { resultTextView.setText(resultTextView.getText().toString() + text); } private void performOperation(String newOperator) { if (!Double.isNaN(operand1)) { operand2 = Double.parseDouble(resultTextView.getText().toString()); if (!operator.equals("")) { switch (operator) { case "+": operand1 += operand2; break; case "-": operand1 -= operand2; break; case "*": operand1 *= operand2; break; case "/": operand1 /= operand2; break; case "=": break; } } else { operand1 = operand2; } } else { operand1 = Double.parseDouble(resultTextView.getText().toString()); } operator = newOperator; resultTextView.setText(""); } } ``` activity_main.xml ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 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/resultTextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="24sp" android:textAlignment="textEnd" android:text=""/> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/button7" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="7"/> <Button android:id="@+id/button8" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="8"/> <Button android:id="@+id/button9" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="9"/> <Button android:id="@+id/buttonDivide" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="/"/> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/button4" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="4"/> <Button android:id="@+id/button5" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="5"/> <Button android:id="@+id/button6" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="6"/> <Button android:id="@+id/buttonMultiply" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="*"/> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/button1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="1"/> <Button android:id="@+id/button2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="2"/> <Button android:id="@+id/button3" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="3"/> <Button android:id="@+id/buttonSubtract" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="-"/> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/button0" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="0"/> <Button android:id="@+id/buttonDot" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="."/> <Button android:id="@+id/buttonEquals" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="="/> <Button android:id="@+id/buttonAdd" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="+"/> </LinearLayout> <Button android:id="@+id/buttonClear" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Clear"/> </LinearLayout> ``` 这个示例代码仅包含了加、减、乘、除四则运算,如果需要实现更多的运算或其他功能,可以根据需要进行修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aaron_Liu0730

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值