我试图使一个应用程序每五分钟后发送一个用户的位置更新.我想我的代码工作正常,但是我收到一个关于应用程序正在使用的权限的错误.我确信我已经在清单文件中添加了权限.有人可以告诉我有什么问题吗?这是我的代码
MainActivity.java
LocationManager locationManager ; String provider; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Getting LocationManager object locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); // Creating an empty criteria object Criteria criteria = new Criteria(); // Getting the name of the provider that meets the criteria provider = locationManager.getBestProvider(criteria,false); if(provider!=null && !provider.equals("")){ // Get the location from the given provider Location location = locationManager.getLastKnownLocation(provider); locationManager.requestLocationUpdates(provider,5*60*1000,this); if(location!=null) onLocationChanged(location); else Toast.makeText(getBaseContext(),"Location can't be retrieved",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(getBaseContext(),"No Provider Found",Toast.LENGTH_SHORT).show(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main,menu); return true; } @Override public void onLocationChanged(Location location) { // Getting reference to TextView tv_longitude TextView tvLongitude = (TextView)findViewById(R.id.tv_longitude); // Getting reference to TextView tv_latitude TextView tvLatitude = (TextView)findViewById(R.id.tv_latitude); // Setting Current Longitude tvLongitude.setText("Longitude:" + location.getLongitude()); // Setting Current Latitude tvLatitude.setText("Latitude:" + location.getLatitude() ); } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String provider,int status,Bundle extras) { // TODO Auto-generated method stub }
}
Location location = locationManager.getLastKnownLocation(provider); locationManager.requestLocationUpdates(provider,this);
我的AndroidManifest就是这样
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.INTERNET"/> <application android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
解决方法
你使用哪个SDK?
如果您使用棉花糖,则需要检查用户是否已经为每个位置呼叫授予权限.
如果您使用棉花糖,则需要检查用户是否已经为每个位置呼叫授予权限.
看看Here.
你应该这样做:
if ( ContextCompat.checkSelfPermission( this,android.Manifest.permission.ACCESS_COARSE_LOCATION ) != PackageManager.PERMISSION_GRANTED ) { ActivityCompat.requestPermissions( this,new String[] { android.Manifest.permission.ACCESS_COARSE_LOCATION },LocationService.MY_PERMISSION_ACCESS_COURSE_LOCATION ); }
如果你没有它,请求许可.
查看上面的链接了解更多信息.