2016-04-12 20 views
0

こんにちは私のアプリでは、TelephonyManagerを使用して場所を取得しています。TelephonyManagerを使用して位置を取得するjava.lang.SecurityException

 TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); 
     doPermissionCheck(); 
     location = (GsmCellLocation) tm.getCellLocation();//throws exception in this line 
     cellID = location.getCid(); 
     lac = location.getLac(); 

doPermissionCheck()::私のマニフェストに

private void doPermissionCheck() { 
     if (ContextCompat.checkSelfPermission(getApplicationContext(), 
       Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(MapsActivity.this, 
        new String[]{ Manifest.permission.ACCESS_COARSE_LOCATION}, 
        MY_PERMISSION_ACCESS_COARSE_LOCATION); 
     } 

     if (ContextCompat.checkSelfPermission(getApplicationContext(), 
       Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(MapsActivity.this, 
        new String[] { Manifest.permission.ACCESS_FINE_LOCATION }, 
        MY_PERMISSION_ACCESS_FINE_LOCATION); 
     } 
    } 

:あなたのよう

04-12 13:59:39.725 6841-6841/com.example.oik.offlinemap E/AndroidRuntime: FATAL EXCEPTION: main 
     Process: com.example.oik.offlinemap, PID: 6841 
     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.oik.offlinemap/com.example.oik.offlinemap.MapsActivity}: java.lang.SecurityException: getCellLocation: Neither user 10057 nor current process has android.permission.ACCESS_COARSE_LOCATION. 
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
     at android.app.ActivityThread.-wrap11(ActivityThread.java) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.app.ActivityThread.main(ActivityThread.java:5417) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
     Caused by: java.lang.SecurityException: getCellLocation: Neither user 10057 nor current process has android.permission.ACCESS_COARSE_LOCATION. 
       at android.os.Parcel.readException(Parcel.java:1599) 
     at android.os.Parcel.readException(Parcel.java:1552) 
     at com.android.internal.telephony.ITelephony$Stub$Proxy.getCellLocation(ITelephony.java:2292) 
     at android.telephony.TelephonyManager.getCellLocation(TelephonyManager.java:826) 
     at com.example.oik.offlinemap.MapsActivity.getLocation(MapsActivity.java:79) 
     at com.example.oik.offlinemap.MapsActivity.onCreate(MapsActivity.java:45) 
     at android.app.Activity.performCreate(Activity.java:6237) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
     at android.app.ActivityThread.-wrap11(ActivityThread.java)  
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
     at android.os.Handler.dispatchMessage(Handler.java:102)  
     at android.os.Looper.loop(Looper.java:148)  
     at android.app.ActivityThread.main(ActivityThread.java:5417)  
     at java.lang.reflect.Method.invoke(Native Method)  
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

:これは誤りである

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

ここではコードの一部であります私はすべての必要な許可を含んでいることがわかりますマニフェストのnsと権限チェックでもアンドロイドMのために、なぜ私はまだ**java.lang.SecurityException**を得るのかわかりません。誰か助けてください。

+0

コールオブジェクト作成TM前doPermissionCheck方法: –

+0

私はあなたがAndroidのM –

+0

@Amit上で実行されていると思う私はすでにそれが動作しない、ことを試みたアンドロイドM –

答えて

1

tm.getCellLocation()に電話する前に、許可確認プロセスが完了するまで待つ必要があります。以下のような:

if (ContextCompat.checkSelfPermission(getApplicationContext(), 
      Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED){ 
    //do your request permission 
}else{ 
    // do your getLocation here 
} 

であなたのActivityからonRequestPermissionsResult、あなたは許可が付与されている確認するか、その後getLocationを行うことはできません。

+0

ありがとうございました –

関連する問題