2015-01-29 7 views
5

Sto utilizzando il codice seguente per condividere un video situato sul dispositivo, funziona perfettamente per la condivisione tramite messaggio, Facebook e iCloud, solo non per posta, posso vedere l'opzione posta c'è, ma nella bozza della posta, il video non è allegato.Video non allegato per la posta durante la condivisione di video utilizzando UIActivityViewController

Nel codice, videoAsset è un PHAsset di tipo PHAssetMediaTypeVideo.

[[PHImageManager defaultManager] requestAVAssetForVideo:videoAsset options:nil resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) { 
    AVURLAsset* urlAsset = (AVURLAsset*)asset; 
    fileUrl = urlAsset.URL; 
    NSLog(@"fileUrl is %@",fileUrl); 

    NSArray *activityItems = [NSArray arrayWithObjects:fileUrl, nil]; 

    UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; 
    [self presentViewController:activityViewController animated:YES completion:nil]; 
}]; 

Se allego un video utilizzando UIImagePickerController, funziona, ho cercato ma non riusciva a trovare una risposta, per favore aiutatemi.

+0

http://stackoverflow.com/a/20211603/2074320 –

+0

@mitulmarsonia cosa? – gabbler

+0

Le opzioni mostrate nella UIActivityViewController totalmente dipende dal tipo di elementi che devono essere condivisi. Ad esempio, se c'è un video, non mostrerà l'opzione Facebook o twitter. Ma se è un'immagine e un titolo, sicuramente mostrerà le opzioni rilevanti. Quanto segue mostra app come mail, twitter, Facebook, assignToContact, salva su rullino fotografico, stampa, copia, ecc. –

risposta

12

Ho finito per salvare il file video nella directory dei documenti e utilizzando l'url del file dalla directory dei documenti, il video è allegato per la condivisione via mail.

[[PHImageManager defaultManager] requestImageDataForAsset:videoAsset options:nil resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) { 
    NSLog(@"info is %@", info); 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString* videoPath = [documentsDirectory stringByAppendingPathComponent:@"IMG_2185.MOV"]; 

    NSError *error; 
    [[NSFileManager defaultManager] removeItemAtPath:videoPath error:&error]; 
    BOOL success = [imageData writeToFile:videoPath atomically:YES]; 
    if (success) { 
     NSArray *activityItems = [NSArray arrayWithObjects:[NSURL fileURLWithPath:videoPath], nil]; 

     UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; 
     [self presentViewController:activityViewController animated:YES completion:nil]; 
    } 
}]; 

Ho anche usato requestExportSessionForVideo metodo per esportare un video per documentare directory, che ha lavorato anche.

[[PHImageManager defaultManager] requestExportSessionForVideo:videoAsset options:nil exportPreset:AVAssetExportPresetPassthrough resultHandler:^(AVAssetExportSession *exportSession, NSDictionary *info) { 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString* videoPath = [documentsDirectory stringByAppendingPathComponent:@"test3.MOV"]; 
    NSFileManager *manager = [NSFileManager defaultManager]; 

    NSError *error; 
    if ([manager fileExistsAtPath:videoPath]) { 
     BOOL success = [manager removeItemAtPath:videoPath error:&error]; 
     if (success) { 
      NSLog(@"I successfully removed it!"); 
     } 
    } 

    NSURL *outputURL = [NSURL fileURLWithPath:videoPath]; 
    NSLog(@"this is the final path %@",outputURL); 
    exportSession.outputFileType=AVFileTypeQuickTimeMovie; 
    exportSession.outputURL=outputURL; 

    [exportSession exportAsynchronouslyWithCompletionHandler:^{ 
     if (exportSession.status == AVAssetExportSessionStatusFailed) { 
      NSLog(@"failed"); 
     } else if(exportSession.status == AVAssetExportSessionStatusCompleted){ 
      NSLog(@"completed!"); 
       dispatch_async(dispatch_get_main_queue(), ^(void) { 
        NSArray *activityItems = [NSArray arrayWithObjects:outputURL, nil]; 

        UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; 
        [self presentViewController:activityViewController animated:YES completion:nil]; 
        //Main 

       }); 


     } 
    }]; 
}]; 
+0

Ti capita di avere uno snippet di come hai usato 'requestExportSessionForVideo'? Sto cercando di usarlo ma l'outputURL viene sempre come zero. Grazie! – batkru

+0

Vedere il post modificato. – gabbler

+0

Amaaaaaaaaaaaazing! Avevo passato così tanto tempo a tentare senza fortuna! Grazie mille – batkru

Problemi correlati