2016-08-19 5 views
-1

現在、Marshmallow SDKを使用していますが、ユーザーがすべてのロケーション呼び出しに対して許可を与えていることを確認していますが、これは私がnullpointer例外が発生する問題を解決する方法

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

      } 

      if (Build.VERSION.SDK_INT >= 23 && 
        ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && 
        ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
       //return 0 ; 
      } 

私のログの猫は、あなたがソースコードについてGPSServiceを更新でし

08-19 00:57:16.537 10992-10992/com.ant.henry.gatesng W/System.err:  java.lang.NullPointerException 
08-19 00:57:16.539 10992-10992/com.ant.henry.gatesng W/System.err:  at android.content.ContextWrapper.checkPermission(ContextWrapper.java:545) 
08-19 00:57:16.539 10992-10992/com.ant.henry.gatesng W/System.err:  at android.support.v4.content.ContextCompat.checkSelfPermission(ContextCompat.java:432) 
08-19 00:57:16.539 10992-10992/com.ant.henry.gatesng W/System.err:  at com.ant.henry.gatesng.GPSService.getLocation(GPSService.java:76) 
08-19 00:57:16.539 10992-10992/com.ant.henry.gatesng W/System.err:  at com.ant.henry.gatesng.CapeActivity.nearBy(CapeActivity.java:190) 
08-19 00:57:16.539 10992-10992/com.ant.henry.gatesng W/System.err:  at java.lang.reflect.Method.invokeNative(Native Method) 
08-19 00:57:16.539 10992-10992/com.ant.henry.gatesng W/System.err:  at java.lang.reflect.Method.invoke(Method.java:515) 
08-19 00:57:16.539 10992-10992/com.ant.henry.gatesng W/System.err:  at android.view.View$1.onClick(View.java:3851) 
08-19 00:57:16.540 10992-10992/com.ant.henry.gatesng W/System.err:  at android.view.View.performClick(View.java:4471) 
08-19 00:57:16.540 10992-10992/com.ant.henry.gatesng W/System.err:  at android.view.View$PerformClick.run(View.java:18789) 
08-19 00:57:16.540 10992-10992/com.ant.henry.gatesng W/System.err:  at android.os.Handler.handleCallback(Handler.java:808) 
08-19 00:57:16.540 10992-10992/com.ant.henry.gatesng W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:103) 
08-19 00:57:16.540 10992-10992/com.ant.henry.gatesng W/System.err:  at android.os.Looper.loop(Looper.java:193) 
08-19 00:57:16.540 10992-10992/com.ant.henry.gatesng W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5323) 
08-19 00:57:16.540 10992-10992/com.ant.henry.gatesng W/System.err:  at java.lang.reflect.Method.invokeNative(Native Method) 
08-19 00:57:16.540 10992-10992/com.ant.henry.gatesng W/System.err:  at java.lang.reflect.Method.invoke(Method.java:515) 
08-19 00:57:16.540 10992-10992/com.ant.henry.gatesng W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824) 
08-19 00:57:16.540 10992-10992/com.ant.henry.gatesng W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) 
08-19 00:57:16.541 10992-10992/com.ant.henry.gatesng W/System.err:  at dalvik.system.NativeStart.main(Native Method) 
+0

あなたの質問を編集して、 'GPSService'と' CapeActivity'からどのように使用されているかを加えてください。私の推測では、 'GPSService'は' Service'を拡張していますが、あなたは[サービスを正しく使う](https://developer.android.com/guide/components/services.html)ではなく、自分でインスタンスを作成しようとしています。 – CommonsWare

答えて

0

下にあるチェック許可を使用する方法ですか?

あなたは、以下のようにGPSService.thisthisを変更するためにチェックすることができない場合は、次の

if (Build.VERSION.SDK_INT >= 23) { 
    if (ContextCompat.checkSelfPermission(GPSService.this, 
      Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && 
     ContextCompat.checkSelfPermission(GPSService.this, 
      Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

     if (ActivityCompat.shouldShowRequestPermissionRationale(GPSService.this, 
       Manifest.permission.ACCESS_FINE_LOCATION)) { 
      Log.i(TAG, "Waiting user's response..."); 

     } else { 
      ActivityCompat.requestPermissions(GPSService.this, 
        new String[]{ 
          Manifest.permission.ACCESS_FINE_LOCATION, 
          Manifest.permission.ACCESS_COARSE_LOCATION 
        }, 
        100); // 100 will be used in "onRequestPermissionsResult" about "requestCode". 
     } 
    } 
} 

その後、あなたはあなたのカスタムサービスでonRequestPermissionsResultをオーバーライドする必要があります。

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    switch (requestCode) { 
     case 100: 
      if (grantResults.length > 0 
        || grantResults[0] == PackageManager.PERMISSION_GRANTED 
        || grantResults[1] == PackageManager.PERMISSION_GRANTED) { 
       Log.i(TAG, "Permissions are granted. Application is available now."); 

      } else { 
       Log.e(TAG, "Permissions are denied. Application is disabled."); 
      } 
    } 
} 
関連する問題