2017-04-23 4 views
-2

によって拒否され、すべてがOKと思われることも許可が必要です - しかし、場所Listerner - コールは、前のアプリにこのコードを使用するユーザ

コールを取得し、今日のイムは、私が持っているユーザー

によって拒否することができる権限が必要です

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

件名にいくつかのスレッドを表示していますが、それでも問題が発生しています。皆さんが助けてくれますか?

public class MainActivity extends AppCompatActivity implements LocationListener 
{ 
    private LocationManager locationManager; 
    public static String locationlong; 
    public static String locationlati; 

    @SuppressWarnings("deprecation") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     TextView tv = (TextView)findViewById(R.id.pig); 
     TextView cow = (TextView)findViewById(R.id.cow); 

     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 1, this); 
    } 
} 
+0

https://developer.androidここ

は完全な例とのリンクです.com/training/permissions/requesting.html – CommonsWare

答えて

0

があなたの活動にパーミッションチェックを追加します:あなたのコード内

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    TextView tv = (TextView) findViewById(R.id.pig); 
    TextView cow = (TextView) findViewById(R.id.cow); 
    if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

     ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 0); 
    } 
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    if (checkLocationPermission()) { 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 1, this); 
    } 


} 

public boolean checkLocationPermission() { 
    String permission = "android.permission.ACCESS_FINE_LOCATION"; 
    int res = this.checkCallingOrSelfPermission(permission); 
    return (res == PackageManager.PERMISSION_GRANTED); 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 

     case 0: { 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       Toast.makeText(getApplicationContext(), "Permission granted", Toast.LENGTH_SHORT).show(); 

      } else { 
       Toast.makeText(getApplicationContext(), "Permission denied", Toast.LENGTH_SHORT).show(); 
      } 
      return; 
     } 

     // other 'case' lines to check for other 
     // permissions this app might request 
    } 
} 

@Override 
public void onLocationChanged(Location location) { 

} 

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

} 

@Override 
public void onProviderEnabled(String provider) { 

} 

@Override 
public void onProviderDisabled(String provider) { 

} 
+0

助けてくれてありがとうが、その警告は一度だけ表示されるように見えますが、このチェックをしていないコードもあります。どのように私はそれを必要とします。 –

+0

マニフェストでターゲットを設定したり、sdkのバージョンを23以上に設定すると警告が表示され、アンドロイドには2種類の許可があります。あなたが実行時にパーミッションを要求し、パーミッションが与えられているかどうかをチェックする必要がある「危険な」パーミッションである。 – rafsanahmad007

+0

はここにリストされている:http://stackoverflow.com/questions/36936914/list-of-android-permissions-通常のアクセス許可と危険なアクセス許可in api – rafsanahmad007

0

基本的にアンドロイド6以降、実行時に特定のアクセス許可を尋ねる必要があるため、ユーザーが拒否することがあります。

checkSelfPermission(..)を使用してリクエストし、回答を表示するにはonRequestPermissionsResultをオーバーライドします。

https://developer.android.com/training/permissions/requesting.html

+0

ありがとうございます。いくつかのスレッドを読み、問題を実装しているようです。 この場合、次のようになります。 int permissionCheck = ContextCompat.checkSelfPermission(thisActivity、 Manifest.permission.WRITE_CALENDAR); しかし、thisActivityに何を使用するのか分かりません。 –

+0

それはあなたが基本的にアクティビティのコンテキストを必要としています。アクティビティでそれを使用している場合は、単に "this"を使ってアクティビティ参照を取得するか、getActivity()フラグメントなどで... – yanivtwin

関連する問題