2016-04-08 2 views
-1

Am пытается принести широту и долготу в классе обслуживания с помощью сети provider.Giving всех разрешений в проявленномAndroid: java.lang.SecurityException

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

Но когда я пытаюсь запустить приложение я получаю исключение безопасности

java.lang.RuntimeException: Unable to create service test.alaramservicedemo.GPSTracker: java.lang.SecurityException: "network" location provider requires ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission. 

GPSTracker.java

public class GPSTracker extends Service implements LocationListener { 

private static final String TAG = "HelloService"; 

private boolean isRunning = false; 
protected LocationManager locationManager; 
String latitude = ""; 
String longitude=""; 
@Override 
public void onCreate() { 
    Log.i(TAG, "Service onCreate"); 
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this); 
    isRunning = true; 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.i(TAG, "Service onStartCommand"); 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      for (int i = 0; i < 5; i++) { 
       try { 
        Thread.sleep(1000); 
       } catch (Exception e) { 
       } 

       if(isRunning){ 
        Log.i(TAG, "Service running latitude "+latitude + " longitude " +longitude); 
       } 
      } 

      stopSelf(); 
     } 
    }).start(); 

    return Service.START_STICKY; 
} 


@Override 
public IBinder onBind(Intent arg0) { 
    Log.i(TAG, "Service onBind"); 
    return null; 
} 

@Override 
public void onDestroy() { 

    isRunning = false; 

    Log.i(TAG, "Service onDestroy"); 
} 

@Override 
public void onLocationChanged(Location location) { 
    latitude = ""+location.getLatitude(); 
    longitude = ""+location.getLongitude(); 

} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 

} 

@Override 
public void onProviderEnabled(String provider) { 

} 

@Override 
public void onProviderDisabled(String provider) { 

} 

}

GPSTracker звонит образуют метод OnReceive() из BroadcastReciver

Intent i = new Intent(context, GPSTracker.class); 
    context.startService(i); 

manifest.xml

<?xml version="1.0" encoding="utf-8"?> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <receiver android:name=".AlarmReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
     </intent-filter> 
    </receiver> 

    <!-- Will not be called unless the application explicitly enables it --> 
    <receiver android:name=".DeviceBootReceiver" 
     android:enabled="false"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
     </intent-filter> 
    </receiver> 

    <service android:name=".GPSTracker"/> 
</application> 

Я не знаю, почему даже я даю разрешение в Manfiest, почему возникает исключение безопасности.

Может ли одна просьба помочь выяснить этот вопрос

+0

Вы испытываете это в зефире? –

+0

нет, я бегу в Kitkat @Vivek Mishra –

+0

, то вы используете Android-студию 2 и выше, используя функцию мгновенного запуска? –

ответ

3

Запишите свое разрешение вне тега приложения. Например:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

     <application 
      android:allowBackup="true" 
      android:icon="@mipmap/ic_launcher" 
      android:label="@string/app_name" 
      android:supportsRtl="true" 
      android:theme="@style/AppTheme"> 
      <activity 
       android:name=".xxxxx" 
       android:screenOrientation="portrait" 
       android:label="@string/app_name" 
       android:theme="@style/AppTheme.NoActionBar"> 
       <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 

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

Использование:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 

Вместо:

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this); 

Если вы звоните на услугу GPSTracker.

+0

am running at Kitkat @Enpi –

+0

Возможно, вы используете неправильного поставщика? – Enpi

0

Try следующие разрешения

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 

также применяются следующие

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

может быть решить вашу проблему.

+0

Я стараюсь, но все та же проблема @Dhavalkumar Solanki –

 Смежные вопросы

  • Нет связанных вопросов^_^