ফটো লাইব্রেরিতে অ্যাক্সেস সেট করা আছে কি না তা নির্ধারণ করুন - পিএইচফটো লাইব্রেরি


102

আইওএস 8-তে নতুন কার্যকারিতা সহ, আপনি যদি অ্যাপ্লিকেশনটিতে কোনও ক্যামেরা ব্যবহার করছেন, এটি ক্যামেরাটি অ্যাক্সেস করার অনুমতি চাইবে এবং তারপরে আপনি যখন ছবিটি পুনরায় নেওয়ার চেষ্টা করবেন, তখন এটি ফটো লাইব্রেরিতে অ্যাক্সেসের অনুমতি চাইবে। পরের বার যখন আমি অ্যাপ্লিকেশনটি চালু করব তখন আমি ক্যামেরা এবং ফটো লাইব্রেরিতে এর অ্যাক্সেসের অনুমতি রয়েছে কিনা তা পরীক্ষা করে দেখতে চাই।

এখানে চিত্র বর্ণনা লিখুন

ক্যামেরার জন্য, আমি এটি পরীক্ষা করে দেখি

if ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo] == AVAuthorizationStatusDenied)
{
// do something
}

আমি ফটো লাইব্রেরির জন্য এর অনুরূপ কিছু সন্ধান করছি।

উত্তর:


88

চেক করুন +[PHPhotoLibrary authorizationStatus]- যদি সেট না করা থাকে তবে তা ফিরে আসবে PHAuthorizationStatusNotDetermined। (তারপরে আপনি +requestAuthorization:একই ক্লাসে অ্যাক্সেসের জন্য অনুরোধ করতে পারেন ))


পিএইচপি ফোটো লাইব্রেরি ব্যবহার করার জন্য আমাকে কি কোনও ভিত্তি বা পাঠাগার যুক্ত করতে / আমদানি করতে হবে? আমি একটি ত্রুটি পেয়ে যাচ্ছি "অঘোষিত শনাক্তকারীর ব্যবহার"
প্রযুক্তি_হুমান

4
অনুমোদনের স্থিতি যাচাই করার পরিবর্তে আমি "আলাসেটস লাইব্রায়ি" ব্যবহার করার চেষ্টা করেছি এবং ফটো লাইব্রেরি বন্ধ থাকলেও তা হ্যাঁ ফিরে আসে।
টেকহিউম্যান

ওহ "ALAssetsLibrary" ব্যবহার করে স্থিতি পেতে সক্ষম। পিএইচপি ফটো লাইব্রেরি ব্যবহার করা সম্ভব কিনা তা জানতে এখনও কৌতুহলগুলি।
টেকহিউম্যান

4
পিএইচপি ফটোলিবারি ফটো ফ্রেমওয়ার্কের অংশ, যা কেবলমাত্র আইওএস 8 এ উপলব্ধ If
টিম

আইওএস 9 এর মতোই, আলাসেটস লাইব্রেরিকে অবমূল্যায়ন করা হয়েছে, সুতরাং আমি অনুমান করি এটি কেন কাজ করছে না।
সুপারটেকনোবফ

131

আমি জানি এটি ইতিমধ্যে উত্তর দেওয়া হয়েছে, তবে কেবল @ টিম উত্তরটি প্রসারিত করার জন্য আপনার প্রয়োজনীয় কোডটি এখানে (আইওএস 8 এবং উপরে) রয়েছে:

PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];

if (status == PHAuthorizationStatusAuthorized) {
     // Access has been granted.
}

else if (status == PHAuthorizationStatusDenied) {
     // Access has been denied.
}

else if (status == PHAuthorizationStatusNotDetermined) {

     // Access has not been determined.
     [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {

         if (status == PHAuthorizationStatusAuthorized) {
             // Access has been granted.         
         }

         else {
             // Access has been denied.
         }
     }];  
}

else if (status == PHAuthorizationStatusRestricted) {
     // Restricted access - normally won't happen.
}

ভুলে যাবেন না #import <Photos/Photos.h>

আপনি যদি সুইফট ৩.০ বা তার বেশি ব্যবহার করেন তবে আপনি নিম্নলিখিত কোডটি ব্যবহার করতে পারেন:

// Get the current authorization state.
let status = PHPhotoLibrary.authorizationStatus()

if (status == PHAuthorizationStatus.authorized) {
    // Access has been granted.
}

else if (status == PHAuthorizationStatus.denied) {
    // Access has been denied.
}

else if (status == PHAuthorizationStatus.notDetermined) {

    // Access has not been determined.
    PHPhotoLibrary.requestAuthorization({ (newStatus) in

        if (newStatus == PHAuthorizationStatus.authorized) {

        }

        else {

        }
    })
}

else if (status == PHAuthorizationStatus.restricted) {
    // Restricted access - normally won't happen.
}

ভুলে যাবেন না import Photos


5
কেন এটি কেবল আইওএস 9 এবং এর বেশি? আইওএস 8 এর পর থেকে ফটো ফ্রেমওয়ার্ক পাওয়া যায় ..
বালাজ ভিনজজে

4
এছাড়াও প্রকল্পে ফটো ফ্রেমওয়ার্ক যুক্ত করতে ভুলবেন না -> লক্ষ্য ->
পর্যায়গুলি

এটি সঠিকভাবে কাজ করে না, আমি অ্যাক্সেসটিকে অস্বীকার করে আবার এটি সক্ষম করেছিলাম, এটি এখনও নির্ধারিত বলে।
টমসওয়ায়ার

"// সীমাবদ্ধ অ্যাক্সেস - সাধারণত ঘটবে না" " কেন? এটি ঘটতে পারে: "ব্যবহারকারী সম্ভবত সক্রিয় বিধিনিষেধের কারণে এই অ্যাপ্লিকেশনটির স্থিতি পরিবর্তন করতে পারবেন না"
NoKey

পিএইচপিফোটো লাইব্রেরি.আরকুয়েস্ট অনুমোদনের মাধ্যমে অনুমতি চেয়ে জিজ্ঞাসা করা কোনও ডায়ালগ দেখানোর কথা বলা হয়েছে? এই লাইনটি ডেকে ডেকে
আনুন

50

ঠিক আনুষ্ঠানিকতা হিসাবে, সুইফট 2. এক্স সংস্করণ:

    func checkPhotoLibraryPermission() {
       let status = PHPhotoLibrary.authorizationStatus()
       switch status {
       case .Authorized:
            //handle authorized status
       case .Denied, .Restricted :
            //handle denied status
       case .NotDetermined:
            // ask for permissions
            PHPhotoLibrary.requestAuthorization() { (status) -> Void in
               switch status {
               case .Authorized:
                   // as above
               case .Denied, .Restricted:
                   // as above
               case .NotDetermined:
                   // won't happen but still
               }
            }
        }
    }

এবং সুইফট 3 / সুইফট 4 :

    import Photos

    func checkPhotoLibraryPermission() {
        let status = PHPhotoLibrary.authorizationStatus()
        switch status {
        case .authorized: 
        //handle authorized status
        case .denied, .restricted : 
        //handle denied status
        case .notDetermined: 
            // ask for permissions
            PHPhotoLibrary.requestAuthorization { status in
                switch status {
                case .authorized: 
                // as above
                case .denied, .restricted: 
                // as above
                case .notDetermined: 
                // won't happen but still
                }
            }
        }
    }

6
ইন সুইফট 3 করতে ভুলবেন না import Photos, আপনি PHPhotoLibrary ব্যবহার করতে চান
ronatory

27

এখানে আইওএস 8+ এর সম্পূর্ণ নির্দেশিকা রয়েছে (এএলএসেটলিবারি ছাড়া):

প্রথমত আমাদের এখনকার মতো ব্যবহারের বিবরণ সরবরাহ করতে হবে এটি পিএইচফটো লাইব্রেরির দ্বারা প্রয়োজনীয়
এটি করার জন্য আমাদের info.plistফাইলটি খুলতে হবে, কীটি সন্ধান করতে হবে Privacy - Photo Library Usage Descriptionএবং এর জন্য মান সরবরাহ করতে হবে। যদি কীটি বিদ্যমান না থাকে তবে কেবল এটি তৈরি করুন।
উদাহরণস্বরূপ এখানে একটি চিত্র এখানে রয়েছে:
এখানে চিত্র বর্ণনা লিখুন এছাড়াও নিশ্চিত হয়ে নিন যে কীটির মান ফাইলের Bundle nameমধ্যে খালি নেই info.plist

এখন যখন আমাদের বর্ণনা রয়েছে, আমরা সাধারণত requestAuthorizationপদ্ধতি পদ্ধতিতে কল করার মাধ্যমে অনুমোদনের জন্য অনুরোধ করতে পারি :

[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
    switch (status) {
        case PHAuthorizationStatusAuthorized:
            NSLog(@"PHAuthorizationStatusAuthorized");
            break;
        case PHAuthorizationStatusDenied:
            NSLog(@"PHAuthorizationStatusDenied");
            break;
        case PHAuthorizationStatusNotDetermined:
            NSLog(@"PHAuthorizationStatusNotDetermined");
            break;
        case PHAuthorizationStatusRestricted:
            NSLog(@"PHAuthorizationStatusRestricted");
            break;
    }
}];

দ্রষ্টব্য 1: requestAuthorization প্রকৃতপক্ষে প্রতিটি কলে সতর্কতা দেখায় না। এটি একবারে একবারে প্রদর্শিত হয়, ব্যবহারকারীর উত্তর সংরক্ষণ করে এবং আবার সতর্কতা না দেখিয়ে প্রতিবারই এটি ফিরিয়ে দেয়। তবে এটি আমাদের যা প্রয়োজন তা নয়, এখানে একটি দরকারী কোড যা সর্বদা সতর্কতা দেখায় যখনই আমাদের দরকার হয় (সেটিংসে পুনঃনির্দেশ সহ):

- (void)requestAuthorizationWithRedirectionToSettings {
    dispatch_async(dispatch_get_main_queue(), ^{
        PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
        if (status == PHAuthorizationStatusAuthorized)
        {
            //We have permission. Do whatever is needed
        }
        else
        {
            //No permission. Trying to normally request it
            [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
                if (status != PHAuthorizationStatusAuthorized)
                {
                    //User don't give us permission. Showing alert with redirection to settings
                    //Getting description string from info.plist file
                    NSString *accessDescription = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSPhotoLibraryUsageDescription"];
                    UIAlertController * alertController = [UIAlertController alertControllerWithTitle:accessDescription message:@"To give permissions tap on 'Change Settings' button" preferredStyle:UIAlertControllerStyleAlert];
                    
                    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil];
                    [alertController addAction:cancelAction];
                    
                    UIAlertAction *settingsAction = [UIAlertAction actionWithTitle:@"Change Settings" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
                        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
                    }];
                    [alertController addAction:settingsAction];
                    
                    [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alertController animated:YES completion:nil];
                }
            }];
        }
    });
}

সাধারণ সমস্যা 1: কিছু ব্যবহারকারী অভিযোগ করেন যে info.plistফাইলটিতে উল্লিখিত পরিবর্তনগুলি করার পরে অ্যাপ্লিকেশন সতর্কতা প্রদর্শন করে না ।
সমাধান: পরীক্ষার Bundle Identifierজন্য প্রকল্পের ফাইল থেকে অন্য কোনওটিতে পরিবর্তন করার চেষ্টা করুন , অ্যাপটি পরিষ্কার এবং পুনর্নির্মাণ করুন। যদি এটি কাজ শুরু করে তবে সবকিছু ঠিকঠাক, নামটির নতুন নাম দিন।

সাধারণ সমস্যা 2: আনার ফলাফল আপডেট না হওয়াতে কিছু নির্দিষ্ট কেস রয়েছে (এবং সেই ফ্যাচগুলির অনুরোধগুলি থেকে চিত্রগুলি ব্যবহার করে এমন দৃশ্যগুলি ততক্ষণে খালি খালি থাকে) যখন অ্যাপ্লিকেশন ফটোগুলির অনুমতি পায়, যখন এটি ডকুমেন্টেশনের প্রতিশ্রুতি অনুসারে চালিত হয়।
আসলে আমরা যখন WRONG কোড ব্যবহার করি তখন এটি ঘটে :

- (void)viewDidLoad {
    if ([PHPhotoLibrary authorizationStatus] != PHAuthorizationStatusAuthorized)
    {
        //Reloading some view which needs photos
        [self reloadCollectionView];
        // ...
    } else {
        [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
            if (status == PHAuthorizationStatusAuthorized)
                [self reloadCollectionView];
            // ...
        }];
    }
    // ...
}

এই ক্ষেত্রে যদি ব্যবহারকারী অনুমতিগুলি অস্বীকার করে viewDidLoadতারপরে সেটিংসে ঝাঁপিয়ে পড়ে, মঞ্জুরিপ্রাপ্ত হয় এবং অ্যাপ্লিকেশনটিতে ফিরে যায়, তবে ভিউগুলি রিফ্রেশ হবে না কারণ [self reloadCollectionView]এবং আনার অনুরোধগুলি প্রেরণ করা হয়নি।
সমাধান: [self reloadCollectionView]এই জাতীয় অনুমোদনের প্রয়োজন হওয়ার আগে আমাদের কেবল অন্যান্য কল আনার অনুরোধগুলি কল করতে হবে এবং করতে হবে:

- (void)viewDidLoad {
    //Reloading some view which needs photos
    [self reloadCollectionView];
    if ([PHPhotoLibrary authorizationStatus] != PHAuthorizationStatusAuthorized)
    {
        // ...
}

আপনি কীভাবে অ্যাপের সেটিংসকে অনুমতিগুলির সাথে লিঙ্ক করবেন?
ব্যবহারকারী 2924482

20

আমি এটি এর মতো করেছিলাম:

- (void)requestPermissions:(GalleryPermissions)block
{
    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];

    switch (status) 
    {
        case PHAuthorizationStatusAuthorized:
            block(YES);
            break;
        case PHAuthorizationStatusNotDetermined:
        {
            [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus authorizationStatus)
            {
                if (authorizationStatus == PHAuthorizationStatusAuthorized)
                {
                    block(YES);
                }
                else
                {
                    block(NO);
                }
            }];
            break;
        }
        default:
            block(NO);
            break;
    }
}

এবং সাফল্য বা ব্যর্থতার উপর নির্ভর করে ব্লক হিসাবে আমার যা করা দরকার তা আমি প্রেরণ করি।


8

আপডেটের জন্য: সুইট 3 আইওএস 10


দ্রষ্টব্য: নিম্নরূপে AppDelegate.swift এ ফটো আমদানি করুন

// AppDelegate.swift

ইউআইকিট আমদানি করুন

ফটো আমদানি করুন

...


func applicationDidBecomeActive(_ application: UIApplication) {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    photoLibraryAvailabilityCheck()

}

//MARK:- PHOTO LIBRARY ACCESS CHECK
func photoLibraryAvailabilityCheck()
{
    if PHPhotoLibrary.authorizationStatus() == PHAuthorizationStatus.authorized
    {

    }
    else
    {
        PHPhotoLibrary.requestAuthorization(requestAuthorizationHandler)
    }
}
func requestAuthorizationHandler(status: PHAuthorizationStatus)
{
    if PHPhotoLibrary.authorizationStatus() == PHAuthorizationStatus.authorized
    {

    }
    else
    {
        alertToEncouragePhotoLibraryAccessWhenApplicationStarts()
    }
}

//MARK:- CAMERA & GALLERY NOT ALLOWING ACCESS - ALERT
func alertToEncourageCameraAccessWhenApplicationStarts()
{
    //Camera not available - Alert
    let internetUnavailableAlertController = UIAlertController (title: "Camera Unavailable", message: "Please check to see if it is disconnected or in use by another application", preferredStyle: .alert)

    let settingsAction = UIAlertAction(title: "Settings", style: .destructive) { (_) -> Void in
        let settingsUrl = NSURL(string:UIApplicationOpenSettingsURLString)
        if let url = settingsUrl {
            DispatchQueue.main.async {
                UIApplication.shared.open(url as URL, options: [:], completionHandler: nil) //(url as URL)
            }

        }
    }
    let cancelAction = UIAlertAction(title: "Okay", style: .default, handler: nil)
    internetUnavailableAlertController .addAction(settingsAction)
    internetUnavailableAlertController .addAction(cancelAction)
    self.window?.rootViewController!.present(internetUnavailableAlertController , animated: true, completion: nil)
}
func alertToEncouragePhotoLibraryAccessWhenApplicationStarts()
{
    //Photo Library not available - Alert
    let cameraUnavailableAlertController = UIAlertController (title: "Photo Library Unavailable", message: "Please check to see if device settings doesn't allow photo library access", preferredStyle: .alert)

    let settingsAction = UIAlertAction(title: "Settings", style: .destructive) { (_) -> Void in
        let settingsUrl = NSURL(string:UIApplicationOpenSettingsURLString)
        if let url = settingsUrl {
            UIApplication.shared.open(url as URL, options: [:], completionHandler: nil)
        }
    }
    let cancelAction = UIAlertAction(title: "Okay", style: .default, handler: nil)
    cameraUnavailableAlertController .addAction(settingsAction)
    cameraUnavailableAlertController .addAction(cancelAction)
    self.window?.rootViewController!.present(cameraUnavailableAlertController , animated: true, completion: nil)
}

উত্তর আপডেট হয়েছে আলভিন জর্জ থেকে


6

আইওএস 14 পরে অ্যাপল একটি নতুন বৈশিষ্ট্য যুক্ত করেছে যা ফটো লাইব্রেরিতে সীমিত অ্যাক্সেস দেবে। আপনার প্রয়োজনীয়তার উপর ভিত্তি করে (কাস্টম ফটো গ্যালারী তৈরির উদাহরণ) আপনি ব্যবহারকারীকে কেবল সীমিত অ্যাক্সেস দিয়েছেন এবং পুরো অ্যাক্সেস দিতে চান কিনা তা পরীক্ষা করে দেখতে হবে।

পিছনের সামঞ্জস্যের জন্য, প্যারামিটার ছাড়াই পুরানো সংস্করণগুলি ফিরে আসে you আপনি সীমিত অ্যাক্সেস পেয়েও অনুমোদিত হন।

সুইফট 5 :

switch PHPhotoLibrary.authorizationStatus(for: .readWrite) {
case .notDetermined:
    // ask for access
case .restricted, .denied:
    // sorry
case .authorized:
    // we have full access
 
// new option: 
case .limited:
    // we only got access to some photos of library
}

আবার সীমিত অ্যাক্সেস স্ক্রিন কল করার জন্য একটি কোড রয়েছে। যদি ব্যবহারকারী কেবলমাত্র সীমাহীন অ্যাক্সেস দেয় এবং আপনি ব্যবহারকারীদের আবার চিত্রগুলি নির্বাচন করতে চান।

PHPhotoLibrary.shared().presentLimitedLibraryPicker(from: presentVCObj)

অ্যাপ্লিকেশনটির প্রতিটি পুনঃসূচনাতে আইওএস ব্যবহারকারীদের সীমিত অ্যাক্সেস সম্পর্কে অবহিত করতে সতর্কতা প্রদর্শন করবে। আপনি যদি সেই সতর্কতাটি থামাতে চান তবে তথ্য.পল্লিস্টেPHPhotoLibraryPreventAutomaticLimitedAccessAlert হ্যাঁ যুক্ত করুন


4
এই সমাধানটি পিএইচপি ফটো লাইব্রেরি কাজ করে না এই.কি. info.plist এ যুক্ত করার পরে কি অন্য কোনও সেটিংয়ের দরকার আছে?
হার্ডিক ঠাক্কর

5

আলাসেটস লাইবারি ব্যবহার করে কাজ করা উচিত:

ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus];
switch (status) {
    case ALAuthorizationStatusNotDetermined: {
        // not determined
        break;
    }
    case ALAuthorizationStatusRestricted: {
        // restricted
        break;
    }
    case ALAuthorizationStatusDenied: {
        // denied
        break;
    }
    case ALAuthorizationStatusAuthorized: {
        // authorized
        break;
    }
    default: {
        break;
    }
}

4
দুর্দান্ত উত্তর তবে এটি আইওএস 9
অবচয়

4
I have a simple solution on swift 2.0

//
//  AppDelegate.swift
//  HoneyBadger
//
//  Created by fingent on 14/08/15.
//  Copyright (c) 2015 fingent. All rights reserved.
//

import UIKit
import Photos

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        self.window?.makeKeyAndVisible()

             self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let initialViewController = storyboard.instantiateViewControllerWithIdentifier("LoginPageID")
            self.window?.rootViewController = initialViewController
            self.window?.makeKeyAndVisible()
        return true
    }
    func applicationDidEnterBackground(application: UIApplication) {
        print("Application On background", terminator: "")
    }
    func applicationDidBecomeActive(application: UIApplication) {
        cameraAllowsAccessToApplicationCheck()
        photoLibraryAvailabilityCheck()
    }
    //MARK:- CAMERA ACCESS CHECK
    func cameraAllowsAccessToApplicationCheck()
    {
        let authorizationStatus = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo)
        switch authorizationStatus {
        case .NotDetermined:
            // permission dialog not yet presented, request authorization
            AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo,
                completionHandler: { (granted:Bool) -> Void in
                    if granted {
                        print("access granted", terminator: "")
                    }
                    else {
                        print("access denied", terminator: "")
                    }
            })
        case .Authorized:
            print("Access authorized", terminator: "")
        case .Denied, .Restricted:
            alertToEncourageCameraAccessWhenApplicationStarts()
        default:
            print("DO NOTHING", terminator: "")
        }
    }
    //MARK:- PHOTO LIBRARY ACCESS CHECK
    func photoLibraryAvailabilityCheck()
    {
        if PHPhotoLibrary.authorizationStatus() == PHAuthorizationStatus.Authorized
        {

        }
        else
        {
            PHPhotoLibrary.requestAuthorization(requestAuthorizationHandler)
        }
    }
    func requestAuthorizationHandler(status: PHAuthorizationStatus)
    {
        if PHPhotoLibrary.authorizationStatus() == PHAuthorizationStatus.Authorized
        {

        }
        else
        {
            alertToEncouragePhotoLibraryAccessWhenApplicationStarts()
        }
    }

    //MARK:- CAMERA & GALLERY NOT ALLOWING ACCESS - ALERT
    func alertToEncourageCameraAccessWhenApplicationStarts()
    {
        //Camera not available - Alert
        let internetUnavailableAlertController = UIAlertController (title: "Camera Unavailable", message: "Please check to see if it is disconnected or in use by another application", preferredStyle: .Alert)

        let settingsAction = UIAlertAction(title: "Settings", style: .Destructive) { (_) -> Void in
            let settingsUrl = NSURL(string:UIApplicationOpenSettingsURLString)
            if let url = settingsUrl {
                dispatch_async(dispatch_get_main_queue()) {
                    UIApplication.sharedApplication().openURL(url)
                }

            }
        }
        let cancelAction = UIAlertAction(title: "Okay", style: .Default, handler: nil)
        internetUnavailableAlertController .addAction(settingsAction)
        internetUnavailableAlertController .addAction(cancelAction)
        self.window?.rootViewController!.presentViewController(internetUnavailableAlertController , animated: true, completion: nil)
    }
    func alertToEncouragePhotoLibraryAccessWhenApplicationStarts()
    {
//Photo Library not available - Alert
        let cameraUnavailableAlertController = UIAlertController (title: "Photo Library Unavailable", message: "Please check to see if device settings doesn't allow photo library access", preferredStyle: .Alert)

        let settingsAction = UIAlertAction(title: "Settings", style: .Destructive) { (_) -> Void in
            let settingsUrl = NSURL(string:UIApplicationOpenSettingsURLString)
            if let url = settingsUrl {
                UIApplication.sharedApplication().openURL(url)
            }
        }
        let cancelAction = UIAlertAction(title: "Okay", style: .Default, handler: nil)
        cameraUnavailableAlertController .addAction(settingsAction)
        cameraUnavailableAlertController .addAction(cancelAction)
        self.window?.rootViewController!.presentViewController(cameraUnavailableAlertController , animated: true, completion: nil)
    }
}

0

এখানে আমি একটি ছোট এবং সাধারণ স্নিপেট ব্যবহার করি যা আমি সাধারণত ব্যবহার করি।

- (void)requestPhotoAuthorization:(void (^)(BOOL granted))granted
{
    void (^handler)(PHAuthorizationStatus) = ^(PHAuthorizationStatus status)
    {
        if (status == PHAuthorizationStatusAuthorized) granted(YES);
        else if (status == PHAuthorizationStatusNotDetermined) [PHPhotoLibrary requestAuthorization:handler];
        else granted(NO);
    };
    handler([PHPhotoLibrary authorizationStatus]);
}

4
এটি নির্ধারিত না হলে মঞ্জুরিপ্রাপ্ত (হ্যাঁ) বা মঞ্জুর করা (কোনও) প্রত্যাবর্তন বলে মনে হচ্ছে না?
শেডস

উপরে হিসাবে এই ব্লকটিতে 'হ্যান্ডলার' দৃ strongly়ভাবে ক্যাপচার করা বজায় রাখার চক্রের দিকে পরিচালিত হতে পারে
আর্নেস্ট

0

সুইফট 2.0+

এখানে উত্তরের সংমিশ্রণের ভিত্তিতে আমি নিজের জন্য একটি সমাধান তৈরি করেছি। অনুমতি না থাকলে এই পদ্ধতিটি যাচাই করে।

আমরা এমন একটি পদ্ধতি পেয়েছি pickVideo()যার জন্য ফটোতে অ্যাক্সেস দরকার requires যদি তা না হয়.Authorized অনুমতি চাওয়া ।

যদি অনুমতি না দেওয়া হয়, pickVideo() হবে না এবং ব্যবহারকারী কোনও ভিডিও বাছাই করতে পারবেন না।

যতক্ষণ না ব্যবহারকারী ফটোতে সম্পূর্ণ অ্যাক্সেস দেয় না, ততক্ষণ আপনি এগুলিকে আপনার অ্যাপ্লিকেশন বেছে নিতে বা ক্রাশ করতে দিতে এড়াতে পারবেন।

  // Method that requires access to photos
  func pickVideo(){
    // Check for permission
    if PHPhotoLibrary.authorizationStatus() != .Authorized{
      // If there is no permission for photos, ask for it
      PHPhotoLibrary.requestAuthorization(requestAuthorizationHandler)
      return
    }
    //... pick video code here...
  }

  func requestAuthorizationHandler(status: PHAuthorizationStatus){
    if PHPhotoLibrary.authorizationStatus() == .Authorized{
      // The user did authorize, so, pickVideo may be opened
      // Ensure pickVideo is called from the main thread to avoid GUI problems
      dispatch_async(dispatch_get_main_queue()) {
        pickVideo()
      }
    } else {
      // Show Message to give permission in Settings
      let alertController = UIAlertController(title: "Error", message: "Enable photo permissions in settings", preferredStyle: .Alert)
      let settingsAction = UIAlertAction(title: "Settings", style: .Default) { (alertAction) in
        if let appSettings = NSURL(string: UIApplicationOpenSettingsURLString) {
          UIApplication.sharedApplication().openURL(appSettings)
        }
      }
      alertController.addAction(settingsAction)
      // If user cancels, do nothing, next time Pick Video is called, they will be asked again to give permission
      let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
      alertController.addAction(cancelAction)
      // Run GUI stuff on main thread
        dispatch_async(dispatch_get_main_queue()) {      
          self.presentViewController(alertController, animated: true, completion: nil)
        }
      }
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.