2016-04-08 13 views
-1

アムマニフェストアンドロイド:java.lang.SecurityException

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

内のすべての権限をprovider.Givingネットワークを使用して、サービスクラスの緯度と経度を取得しようとしている。しかし、私は、アプリケーションを実行しようとすると、取得していますセキュリティ例外

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が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> 

からonReceive()メソッドを呼び出す形成されています

なぜManfiestで許可を与えているのかわからないので、なぜセキュリティ例外が発生するのですか?

いずれかが問題

+0

これはmarshmallowでテストしていますか? –

+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

使用見つけるためのお手伝いをしていただけます:あなたがサービスGPSTracker呼び出す場合

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

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

の代わりに。

+0

Kitkat @Enpiで動作しています –

+0

おそらく間違ったプロバイダを使用していますか? – Enpi

0

も、それはあなたの問題を解決するかもしれ

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

を以下の適用以下の許可

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

を試してみてください。

+0

私は試してみるが、それでも同じ問題@Dhavalkumar Solanki –

関連する問題