दिलचस्प पोस्ट
मैं "क्या आप इस विंडो को बंद करना चाहते हैं" प्राप्त करने के बिना एक ब्राउज़र विंडो को कैसे बंद कर सकता हूँ? SQLite में कॉलम कैसे हटाएं या जोड़ें? ऑपरेटर के बीच LINQ Index.php htaccess पर सभी को रीडायरेक्ट करें JQuery और regex का उपयोग करके ईमेल पते की पुष्टि करना NSURL कनेक्शन का समय समाप्त? क्या अच्छा जावा है, शाप की तरह, टर्मिनल अनुप्रयोगों के लिए पुस्तकालय? ExecJS :: रनटाइम विंडोज पर रूबीट्यूटोरियल का पालन करने की कोशिश कर रहा है आवश्यक पुस्तकालय rt.jar पर प्रतिबंध के कारण कक्षा पर पहुंच प्रतिबंध? होम कुंजी को अक्षम कैसे करें क्लास अपने सुपर वर्ग के आवश्यक सदस्यों को लागू नहीं करता है एक "अस्पष्ट रीडायरेक्ट" त्रुटि प्राप्त करना विन्यास स्थान से कॉन्फ़िग लोड करने के लिए कॉन्फ़िगरेशन प्रबंधक का उपयोग करना डेटा। योग्य में एची पैडिंग / मार्जिन के साथ सीएसएस 100% ऊंचाई

SecurityException फेंके बिना रनटाइम पर अनुमति की जांच कैसे की जा सकती है?

मैं एक ऐसे समारोह को डिज़ाइन करता हूं जो एसडी से एक संसाधन प्राप्त कर सकता है / सेट कर सकता है और यदि एसडी से नहीं मिला तो संपत्ति से इसे ले जाओ और यदि संभव हो तो एसडी को वापस संपत्ति लिखें
यह फ़ंक्शन विधि अभिविन्यास से जांच सकता है यदि एसडी माउंट किया गया है और पहुंच योग्य है …

boolean bSDisAvalaible = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); 

मेरे डिज़ाइन किए गए फ़ंक्शन का उपयोग एक ऐप (प्रोजेक्ट) से दूसरे तक किया जा सकता है (android.permission.WRITE_EXTERNAL_STORAGE के साथ या बिना)

तो मैं यह जांचना चाहूंगा कि क्या वर्तमान एप्लिकेशन में सुरक्षा ऐक्सेप्शन के बिना खेल रहे बिना यह विशेष अनुमति है।

क्या यह रनटाइम पर वर्तमान परिभाषित अनुमतियों से परामर्श करने के लिए एक "अच्छा" तरीका मौजूद है?

वेब के समाधान से एकत्रित समाधान "SecurityException फेंके बिना रनटाइम पर अनुमति की जांच कैसे की जा सकती है?"

आप इस के लिए Context.checkCallingorSelfPermission() फ़ंक्शन का उपयोग कर सकते हैं। यहाँ एक उदाहरण है:

 private boolean checkWriteExternalPermission() { String permission = "android.permission.WRITE_EXTERNAL_STORAGE"; int res = getContext().checkCallingOrSelfPermission(permission); return (res == PackageManager.PERMISSION_GRANTED); } 

यह एक और समाधान भी है

 PackageManager pm = context.getPackageManager(); int hasPerm = pm.checkPermission( android.Manifest.permission.WRITE_EXTERNAL_STORAGE, context.getPackageName()); if (hasPerm != PackageManager.PERMISSION_GRANTED) { // do stuff } 

आप इसका उपयोग भी कर सकते हैं:

 private boolean doesUserHavePermission() { int result = context.checkCallingOrSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); return result == PackageManager.PERMISSION_GRANTED; } 

Google दस्तावेज़ की तरह:

 // Assume thisActivity is the current activity int permissionCheck = ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE); 

मेरे तरीकों को साझा करने के मामले में किसी को उनकी ज़रूरत है:

  /** Determines if the context calling has the required permission * @param context - the IPC context * @param permissions - The permissions to check * @return true if the IPC has the granted permission */ public static boolean hasPermission(Context context, String permission) { int res = context.checkCallingOrSelfPermission(permission); Log.v(TAG, "permission: " + permission + " = \t\t" + (res == PackageManager.PERMISSION_GRANTED ? "GRANTED" : "DENIED")); return res == PackageManager.PERMISSION_GRANTED; } /** Determines if the context calling has the required permissions * @param context - the IPC context * @param permissions - The permissions to check * @return true if the IPC has the granted permission */ public static boolean hasPermissions(Context context, String... permissions) { boolean hasAllPermissions = true; for(String permission : permissions) { //you can return false instead of assigning, but by assigning you can log all permission values if (! hasPermission(context, permission)) {hasAllPermissions = false; } } return hasAllPermissions; } 

और इसे कॉल करने के लिए:

 boolean hasAndroidPermissions = SystemUtils.hasPermissions(mContext, new String[] { android.Manifest.permission.ACCESS_WIFI_STATE, android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.INTERNET, }); 

आपको निम्न तरीके से अनुमतियों की जांच करनी चाहिए (जैसा कि एंड्रॉइड अनुमतियां बताया गया है ):

 int result = ContextCompat.checkSelfPermission(getContext(), Manifest.permission.READ_PHONE_STATE); 

फिर, अपने परिणामों की तुलना या तो करें:

 result == PackageManager.PERMISSION_DENIED 

या:

 result == PackageManager.PERMISSION_GRANTED 

जो कोड मेरे लिए ठीक काम करता है वह है: –

  final int MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 102; if ((ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)) { requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE); } else { // user already provided permission // perform function for what you want to achieve } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { boolean canUseExternalStorage = false; switch (requestCode) { case MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { canUseExternalStorage = true; } if (!canUseExternalStorage) { Toast.makeText(getActivity(), "Cannot use this feature without requested permission", Toast.LENGTH_SHORT).show(); } else { // user now provided permission // perform function for what you want to achieve } } } } 

जीपीएस स्थान एंड्रॉइड स्टूडियो सक्षम करें

  1. AndroidManifest.Xml में अनुमति प्रविष्टि जोड़ें
  1. MapsActivity.java

     public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { private GoogleMap mMap; private Context context; private static final int PERMISSION_REQUEST_CODE = 1; Activity activity; /** * ATTENTION: This was auto-generated to implement the App Indexing API. * See https://g.co/AppIndexing/AndroidStudio for more information. */ private GoogleApiClient client; @Override protected void onCreate(Bundle savedInstanceState) { context = getApplicationContext(); activity = this; super.onCreate(savedInstanceState); requestPermission(); checkPermission(); setContentView(R.layout.activity_maps); // Obtain the SupportMapFragment and get notified when the map is ready to be used. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; LatLng location = new LatLng(0, 0); mMap.addMarker(new MarkerOptions().position(location).title("Marker in Bangalore")); mMap.moveCamera(CameraUpdateFactory.newLatLng(location)); mMap.setMyLocationEnabled(true); } private void requestPermission() { if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.ACCESS_FINE_LOCATION)) { Toast.makeText(context, "GPS permission allows us to access location data. Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show(); } else { ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQUEST_CODE); } } private boolean checkPermission() { int result = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION); if (result == PackageManager.PERMISSION_GRANTED) { return true; } else { return false; } }