2017-04-23 22 views
-2

被拒绝使用以前的应用程序的代码权限和所有似乎确定 - 但今天即时得到一个位置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/requests.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

感谢您的帮助,但这一警告似乎只出现一次,也是我有没有这个检查代码。我为什么需要它而不是其他人。当你设定的目标或manifest..and的Android SDK编译版本23或以上有2种许可的正常和危险 –

+0

警告将会出现。关于“您需要申请许可,在运行时,也检查权限授予或不.. – rafsanahmad007

+0

这里dangerous'权限列表:http://stackoverflow.com/questions/36936914/list-of-android-permissions-正常的权限和危险的权限,在-API – rafsanahmad007

0

基本上由于Android 6你要问上运行某些权限,所以用户可以拒绝他们。

使用checkSelfPermission(..)来要求它,并覆盖onRequestPermissionsResult看到答案。

下面是与完整的例子链接:

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

+0

非常感谢。阅读几个主题,似乎有问题的实施。 遇到此 int permissionCheck = ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_CALENDAR); 但不确定要使用什么thisActivity –

+0

那么这取决于你在哪里implemening它,你基本上需要的活动范围内,如果你在活动中使用它简单地使用“本”,以获得活动的参考,或getActivity()在片段等等... – yanivtwin