Kotlin - проблема с доступом к Интернету и местоположению - PullRequest
0 голосов
/ 02 декабря 2018

writing пишу приложение для Android, которое использует разрешения как для определения местоположения, так и для подключения к Интернету, и я запускаю его на своем планшете.Как видите, я включил оба файла в файл манифеста.Проблема заключается в том, что при вызове функции OnConnected () ниже , если в MainActivity.kt оценивается как true, и я не могу продолжить в этой функции.Так что вы можете дать мне подсказку, чтобы предоставить еще немного кода, если он не имеет отношения

AndroidManifest.xml:

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

MainActivity.kt

override fun onConnected(p0: Bundle?) {
    if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
    {
        return;
    }
//some code 
}

Ответы [ 3 ]

0 голосов
/ 02 декабря 2018

вам нужно спросить пользователя о разрешении и получить одобрение посмотрите это, чтобы запросить вы можете запросить разрешение как этот

ActivityCompat.requestPermissions(MainActivity.this,
                new String[]{Manifest.permission. ACCESS_FINE_LOCATION,Manifest.permission. ACCESS_COARSE_LOCATION},
                reqCode);

, и вы можете получить результат запроса следующим образом:

@Override
 public void onRequestPermissionsResult(int requestCode, String 
 permissions[], int[] grantResults) {
                switch (requestCode) {
                    case reqCode: {
        // If request is cancelled, the result arrays are empty.
                        if (grantResults.length > 0
                                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                            // permission was granted, yay! Do the
                            // contacts-related task you need to do.          
                        } else {
                            // permission denied, boo! Disable the
                            // functionality that depends on this permission.
                            Toast.makeText(MainActivity.this, "Permission denied", Toast.LENGTH_SHORT).show();
                        }
                        return;
                    }
                    // other 'case' lines to check for other
                    // permissions this app might request
                }
            }
0 голосов
/ 02 декабря 2018

Начиная с Android 6.0, необходимо запрашивать разрешение. Лучший способ - создать класс accessManager для обработки этого, а затем проверить в своей активности, принял ли пользователь разрешения:

 class PermissionManager private constructor() {

   fun checkPermission(
    activity: Activity,
    permissionRequests: Array<String>?,
    requestCode: Int
): Boolean {

    permissionRequests?.let {
        it.firstOrNull {
            ContextCompat.checkSelfPermission(
                activity,
                it
            ) != PackageManager.PERMISSION_GRANTED
        }?.apply {
            ActivityCompat.requestPermissions(
                activity,
                permissionRequests,
                requestCode
            )
            return false
        }
    }
    return true
}

companion object {
    val instance by lazy { PermissionManager() }
    const val CAMERA_PERMISSION = 1
}

}

Тогда в своей деятельности проверь разрешение Результат:

   class MainActivity : AppCompatActivity() {
       override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_ar)
    //If the user has the permission accepted the next times
        if (PermissionManager.instance.checkPermission(
            this, arrayOf(
                Manifest.permission.CAMERA
            ), PermissionManager.CAMERA_PERMISSION
        )
        ) {
            initLogic()
        }
    }
    override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<out String>,
    grantResults: IntArray
) {
    when (requestCode) {
        PermissionManager.CAMERA_PERMISSION -> {
            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                initLogic()
            } else {
                return
            }
        }
    }
 }
}
0 голосов
/ 02 декабря 2018

Вы должны понимать логику разрешений в Android.Простое добавление разрешений в манифесте не означает, что пользователь разрешил приложению делать то, что разрешают эти разрешения.

Если ваше условие if оценивается как true, так как эти разрешения не предоставлены, вы должныспросите пользователя о таких разрешениях.

Android имеет несколько хороших документов о том, как это сделать.

Я настоятельно рекомендую вам пройти через это.

...