varios studio solicitar shouldshowrequestpermissionrationale permisos permiso pedir multiples camara almacenamiento android eclipse permissions javafxports gluon-mobile

shouldshowrequestpermissionrationale - solicitar multiples permisos android studio



¿Cómo solicitar permisos durante el tiempo de ejecución cuando se utiliza el entorno móvil de Gluon? (1)

Para empezar, puede agregar el android-support-v4.jar a su proyecto:

Cópielo desde su ubicación en ANDROID_HOME / extras / android / support / v4 / android-support-v4.jar a una carpeta de libs en su proyecto, y luego agregue la dependencia al archivo build.gradle:

dependencies { androidCompile files(''libs/android-support-v4.jar'') }

Suponiendo que se está orientando a Android SDK 23+:

android { minSdkVersion ''23'' compileSdkVersion ''23'' targetSdkVersion ''23'' manifest = ''src/android/AndroidManifest.xml'' }

entonces sabrá que, de manera predeterminada, todos los permisos incluidos en el manifiesto estarán deshabilitados.

Si desea verificar los permisos en el tiempo de ejecución, puede definir una nueva actividad que se encargue de solicitar permisos con un diálogo integrado (usando ActivityCompat.requestPermissions ), registrar esta actividad en el manifiesto y llamarlo desde FXActivity dentro de un nueva intención que pasa una lista con los permisos necesarios.

Solo necesita llamar a FXActivity.getInstance().setOnActivityResultHandler() para escuchar el final de esa actividad y reanudar la llamada si se otorgan los permisos.

El siguiente código se basa parcialmente en la clase PermissionHelper .

Utilizaré el caso simple del servicio Marcador de la nueva biblioteca Charm Down 3.0.0, que requiere Manifest.permission.CALL_PHONE .

AndroidDialerService.java, en el paquete de Android

public class AndroidDialerAskService implements DialerAskService { public static final String KEY_PERMISSIONS = "permissions"; public static final String KEY_GRANT_RESULTS = "grantResults"; public static final String KEY_REQUEST_CODE = "requestCode"; @Override public void call(String number) { if (Build.VERSION.SDK_INT >= 23) { if (ContextCompat.checkSelfPermission(FXActivity.getInstance(), Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { FXActivity.getInstance().setOnActivityResultHandler((requestCode, resultCode, data) -> { if (requestCode == 11112) { // if now we have permission, resume call if (ContextCompat.checkSelfPermission(FXActivity.getInstance(), Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) { call(number); } } }); Intent permIntent = new Intent(FXActivity.getInstance(), PermissionRequestActivity.class); permIntent.putExtra(KEY_PERMISSIONS, new String[]{Manifest.permission.CALL_PHONE}); permIntent.putExtra(KEY_REQUEST_CODE, 11111); FXActivity.getInstance().startActivityForResult(permIntent, 11112); return; } } if (number != null && !number.isEmpty()) { Uri uriNumber = Uri.parse("tel:" + number); Intent dial = new Intent(Intent.ACTION_CALL, uriNumber); FXActivity.getInstance().startActivity(dial); } } public static class PermissionRequestActivity extends Activity { private String[] permissions; private int requestCode; @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { FXActivity.getInstance().onRequestPermissionsResult(requestCode, permissions, grantResults); finish(); } @Override protected void onStart() { super.onStart(); permissions = this.getIntent().getStringArrayExtra(KEY_PERMISSIONS); requestCode = this.getIntent().getIntExtra(KEY_REQUEST_CODE, 0); ActivityCompat.requestPermissions(this, permissions, requestCode); } } }

AndroidManifest.xml

. . . <uses-permission android:name="android.permission.CALL_PHONE"/> . . . <activity android:name="javafxports.android.FXActivity" .../> <activity android:name="com.gluonhq.charm.down.plugins.android.AndroidDialerService$PermissionRequestActivity" /> . . .

Soy nuevo aquí y es por eso que todavía no conozco todas las reglas del sitio, ¡lo siento por eso!

Estoy construyendo una aplicación Java para escritorio y Android usando el complemento móvil Gluon en la herramienta Eclipse. Tengo un código variable para Desktop y Android como se describe en un ejemplo ( http://docs.gluonhq.com/samples/gonative/ ). Así que tengo Android NativeService específico donde tengo un método para leer archivos de almacenamiento externo (que funciona). También estudié cómo solicitar permisos en tiempo de ejecución cuando utilizo un entorno nativo de Android ( error de permiso de almacenamiento en Marshmallow ). Puedo solicitar el permiso, pero no puedo ver el resultado.

Ahora estoy solicitando los permisos de la misma manera, pero ¿cómo puedo recibir los resultados? No puedo sobrerrive onRequestPermissionsResult como en el ejemplo, porque no tengo cosas de android.support.v4.app directamente disponibles. ¿Podría alguien ayudarme y darme un ejemplo?

AndroidNativeService.java:

package com.tentaattorix; import java.io.IOException; import java.io.File; import android.os.Environment; import android.media.MediaScannerConnection; import android.net.Uri; import android.content.Context; import javafxports.android.FXActivity; import android.util.Log; import android.widget.Toast; import android.content.pm.PackageManager; import android.os.Build; import com.avustajat.LueJaKirjoita; /** * Sanaston luku: Android-natiivi toteutus! * @author PT * @version 24.10.2016 * */ public class AndroidNativeService implements NativeService { private static final String TAG = "Tentaattorix Native Service"; private Sanastot sanastot = new Sanastot(); private static final int MY_PERMISSIONS_USE_EXTERNAL_STORAGE = 1; public AndroidNativeService() { // } @Override public Sanastot haeSanastot(String juuriKansio, String sanastoRegex, char kommentti, char erotin) throws IOException { String polku = Environment.getExternalStorageDirectory().toString(); String readme = "LueMinut.txt"; String kansioPolku =""; //Luodaan kansio, jos sitä ei vielä ole. File kansio = new File(polku, juuriKansio); kansio.mkdir(); //Asetetaan oikeudet, jos vaikka auttais skannaukseen. kansio.setWritable(true); kansio.setReadable(true); kansio.setExecutable(true); kansioPolku = kansio.getAbsolutePath(); //Kysy oikeudet, jos niitä ei ole! if (isStoragePermissionGranted()) { //Luodaan kansioon tiedosto LueMinut.txt. try { LueJaKirjoita.luoLueMinut(kansioPolku, readme); } catch (IOException e){ throw e; } //Informoidaan uudesta kansiosta ja sinne tulevista tiedostoista järjestelmää! scanFile(kansioPolku + File.separator + readme); //Luetaan sanastot kansiosta. sanastot = LueJaKirjoita.lueTiedostot(kansioPolku, sanastoRegex, kommentti, erotin); } // Jos sanastot ei sisällä yhtään sanastoa, // niin laitetaan edes yksi :) if (sanastot.annaLkm() < 1) { String[] rivix = {"Tyhjä sanasto!", "Empty glossary!"}; Sanasto san = new Sanasto("sanasto_"); san.lisaa(rivix); sanastot.lisaa(san); } return sanastot; } /** * //Informoidaan uudesta kansiosta ja sinne tulevista tiedostoista järjestelmää! * @param path lisätty polku+tiedosto */ private void scanFile(String path) { MediaScannerConnection.scanFile(FXActivity.getInstance().getApplicationContext(), new String[] { path }, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { Log.i("TAG", "Finished scanning " + path); } }); } private boolean isStoragePermissionGranted() { if (Build.VERSION.SDK_INT >= 23) { if (FXActivity.getInstance().checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { Log.v(TAG,"Permission is granted"); return true; } else { Log.v(TAG,"Permission is revoked"); FXActivity.getInstance().requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_USE_EXTERNAL_STORAGE); return false; } } else { //permission is automatically granted on sdk<23 upon installation Log.v(TAG,"Permission is granted"); return true; } } }