我正在学习Android Google API。我正在创建一个应用程序以通过Google Play服务获取最后一个位置。在尝试了许多教程后,我的位置变得为空。我正在我的手机上运行应用程序,即API 23。我在手机上保留位置和数据设置。下面是我的代码。
渐变相关性:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.google.android.gms:play-services:7.5.0'
}
AndroidManifest。xml
<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
主活动代码
package com.lab.locationawareapp;
import android.location.Location;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks;
import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;
import com.google.android.gms.location.LocationServices;
public class MainActivity extends AppCompatActivity implements
ConnectionCallbacks, OnConnectionFailedListener {
protected static final String TAG = "MainActivity";
/**
* Provides the entry point to Google Play services.
*/
protected GoogleApiClient mGoogleApiClient;
/**
* Represents a geographical location.
*/
protected Location mLastLocation;
protected String mLatitudeLabel;
protected String mLongitudeLabel;
protected TextView mLatitudeText;
protected TextView mLongitudeText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLatitudeLabel = getResources().getString(R.string.latitude_label);
mLongitudeLabel = getResources().getString(R.string.longitude_label);
mLatitudeText = (TextView) findViewById((R.id.latitude_text));
mLongitudeText = (TextView) findViewById((R.id.longitude_text));
buildGoogleApiClient();
}
/**
* Builds a GoogleApiClient. Uses the addApi() method to request the LocationServices API.
*/
protected synchronized void buildGoogleApiClient() {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
@Override
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
@Override
protected void onStop() {
super.onStop();
if (mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}
}
/**
* Runs when a GoogleApiClient object successfully connects.
*/
@Override
public void onConnected(Bundle connectionHint) {
// Provides a simple way of getting a device's location and is well suited for
// applications that do not require a fine-grained location and that do not need location
// updates. Gets the best and most recent location currently available, which may be null
// in rare cases when a location is not available.
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (mLastLocation != null) {
mLatitudeText.setText(String.format("%s: %f", mLatitudeLabel,
mLastLocation.getLatitude()));
mLongitudeText.setText(String.format("%s: %f", mLongitudeLabel,
mLastLocation.getLongitude()));
} else {
Toast.makeText(this, R.string.no_location_detected, Toast.LENGTH_LONG).show();
}
}
@Override
public void onConnectionFailed(ConnectionResult result) {
Log.i(TAG, "Connection failed: ConnectionResult.getErrorCode() = " + result.getErrorCode());
}
@Override
public void onConnectionSuspended(int cause) {
Log.i(TAG, "Connection suspended");
mGoogleApiClient.connect();
}
}
试着从我面对的这个链接,我在那里放了一些代码,所以你可以试着得到Marshmallow中的当前位置0,低于23 API,使用融合位置给出确切的当前位置
检查您测试应用程序的设备是否更新了google Play服务??如果没有,那么更新它应该与你的gradle play服务版本相匹配
如果系统没有缓存的位置,getLast位置将返回null。这是指其他程序最近没有请求该位置的任何时候。您要么需要检查它是否为空,要么需要请求位置而不是获取最后一个位置(请注意,请求位置需要时间,并且如果您无法获得GPS锁定并且想要高精度,可能永远不会调用您的回调)。
使用AndroidMarshmallow,您必须明确请求用户的许可,尽管您已在清单文件中指定了这些许可。因此,您必须通过以下方式请求位置权限:首先,您为位置创建一个请求代码
public static final int LOCATION_REQUEST_CODE = 1001; //Any number
然后检查是否已经授予权限,如果没有,代码将请求权限,这将显示一个本机弹出窗口,要求拒绝/允许位置权限
if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_REQUEST_CODE);
} else {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
}
在请求任何位置之前,最好在活动的onCreate()
中写入上述代码。然后根据用户在弹出窗口上采取的操作,您将得到一个回调,您可以根据自己的需求执行。
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case LOCATION_REQUEST_CODE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED
&& (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED)) {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
}
}
}
}
此外,无论您在哪里尝试获取位置,都应该检查是否已向应用程序授予位置权限,然后获取位置。
if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
}
您可以请求清单。准许访问\u FINE\u位置
或清单。准许访问\u粗略\u位置
,或同时访问两者。这取决于你的要求。
问题内容: 我想支持Rtl,并在最后一个片段上设置当前项目,但是当我在自己的代码中编写此代码时,我不知道如何访问最后一个片段。 根据这篇文章,我想让我成为Rtl: MainActivity.java ,我在其中定义: 最后,这是我的视图寻呼机适配器: 问题答案: 因为我用: 在设置适配器之前,它无法正常工作,在设置适配器之后,我应该编写此代码,这要归功于Kevin Chris和K Neeraj L
问题内容: 下面的代码是在第一个位置上查找视图。如何找到最后一个位置的视图? 这是我的xml 问题答案: 试试这个 试试这个 或尝试这个 只需执行以下操作即可:
我正在尝试运行我的React-native应用程序“Android”,但在我手动添加项目文件中的SDK路径之前,每次都是这样 local.properties RN错误 那我犯了什么错?
问题内容: 我想知道用JPA获取表的最后一个条目的最佳方法是什么。在Sql中,我正在寻找的将是: 我当时在考虑model.count(),但这听起来更像是一种破解,而不是一个好的解决方案;) 问题答案: 您可以使用看起来与查询非常相似的。 建立后,您可以致电 其次是 编辑:我的错误:请注意下面的mtpettyp的注释。 不要使用query.getSingleResult(),因为如果返回的行不完全
问题内容: 我有一个android项目,在其中使用本机代码对SIP进行处理(使用libosip2和libeXosip2)。我的本机代码与库的源代码一起编译到一个模块中。 代码可以正常编译,并且生成的库具有我期望的所有符号,但是当我尝试加载生成的库时,出现以下错误: 我的Application.mk看起来像这样: 我确实使用ndk-depends检查了未捕获的依赖项,这给了我 添加loadLibra