【发布时间】:2016-03-28 20:54:55
【问题描述】:
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
//getting GPS status
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
//getting network status
isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
两者都是错误的,虽然我确实检查了 Marshmallow ,但有运行时权限之类的东西,所以我关注了这些链接 link1 和 link2
并在 isNetworkEnabled 返回 0 之前进行了一些调试并将checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION); 放入,即PERMISSION_GRANTED
代码
SplashScreenActivity
public class SplashScreenActivity extends Activity {
private static final String TAG = "SplashScreenActivity";
boolean isGPSEnabled = false;
// flag for network status
boolean isNetworkEnabled = false;
final private int REQUEST_CODE_ASK_PERMISSIONS = 123;
@TargetApi(Build.VERSION_CODES.M)
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.activity_splashscreen);
int hasLocationPermission = checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION);
if (hasLocationPermission != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
REQUEST_CODE_ASK_PERMISSIONS);
return;
}
//comes till here . ie hasLocationPermission is true
LocationManager locationManager = (LocationManager) getApplicationContext().getSystemService(LOCATION_SERVICE);
checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION); //breakpoint at this line gives 0 ie PERMISSION_GRANTED
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); //false at debug breakpoint
isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);//false at debug breakpoint
}
}
清单Here
【问题讨论】:
-
你在哪里执行这个?在模拟器中还是在真实设备上?如果是真的,那么请说明:模型、构建(操作系统版本和内部版本号)和任何可能相关的 logcat.. 很可能您有 2 个不同的活动或任何一个有权限的活动,而 1 没有.. .. 也
hasWriteContactsPermission检查 GPS 是不好的做法...使用其他人可能阅读并理解该变量的确切名称...同样适用于Build.VERSION.SDK_INT >= 23chek this -
@Bonatti 将其更新为 hasLocationPermission,在设备中执行此操作:Samsung Edge 6,android M,android ver 6.0.1 build# MMB29K.G925IDVU3EPC5,在此处记录pastebin.com/9WstqwL1,但是通过调试我能够查明该问题仅在 locationManager.isProviderEnabled
-
@Bonatti 你所说的
1 has permissions, and 1 does not是什么意思我通过调试检查了 GPS Tracker 类,它有权限 -
它更好,但是,如果我们要提供帮助,信息是必须的......在
getLocation(),放一个 Log.v(TAG, "hasLocationPermission "+hasLocationPermission);` on它,然后将 LogCat 粘贴到您的问题上,以便其他人可以提供帮助。该函数中出现的android对象是什么?最后,在您的应用程序中添加一些详细信息...您似乎希望获得线性代码执行的结果,而 GPS 可能需要一段时间来收集数据。
标签: android android-6.0-marshmallow