2016-04-08 14 views
-1

Am tezahürAndroid: java.lang.SecurityException

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

tüm iznini provider.Giving ağını kullanarak hizmet sınıfında enlem ve boylam alınmaya çalışılırken Ama uygulamayı çalıştırmayı denediğinizde alıyorum bir güvenlik istisna

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

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> 
BroadcastReciver gelen OnReceive() metodu

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

meydana aradığını

Manifest'te neden izin alıyorum, neden güvenlik istisnası alıyorum.

herhangi bir konuyu

+0

Bunu hatmi olarak mı test ediyorsunuz? –

+0

no, Kitkat @Vivek Mishra –

+0

'da koşuyorum, o zaman ani çalışma özelliğini kullanarak android stüdyosu 2 ve üstü kullanıyor musunuz? –

cevap

3

Uygulama etiketinizin dışında izninizi yazın. Bunun gibi:

<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

kullanın öğrenmek için yardım edebilir:

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

yerine:

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

hizmeti bir GPSTracker aradığınız edin. izni aşağıdaki

+0

Kitkat @Enpi'de koşuyorum –

+0

Yanlış sağlayıcıyı mı kullanıyorsunuz? – Enpi

0

deneyin

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

ayrıca sorununuzu çözmek olabilir

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

aşağıdaki geçerlidir.

+0

Denedim ama yine de aynı sorun @Dhavalkumar Solanki –

İlgili konular