2015-01-29 5 views
5

Ich verwende den folgenden Code, um ein Video auf dem Gerät zu teilen, funktioniert es hervorragend für die Weitergabe per Nachricht, Facebook und iCloud, nur nicht für Mail, kann ich die Mail-Option sehen ist da, aber im Mailentwurf ist das Video nicht angehängt.Video nicht für E-Mails bei der Freigabe von Video mit UIActivityViewController

Im Code ist videoAsset ein PHAsset vom Typ 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]; 
}]; 

Wenn ich ein Video mit UIImagePickerController befestigen, es funktioniert, ich gesucht, aber konnte keine Antwort finden, bitte helfen Sie.

+0

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

+0

@mitulmarsonia was? – gabbler

+0

Die in den UIActivityViewController gezeigten Optionen ganz auf der Art der Gegenstände abhängen, die gemeinsam genutzt werden soll. Wenn beispielsweise ein Video vorhanden ist, wird die Option "Facebook" oder "Twitter" nicht angezeigt. Aber wenn es ein Bild und ein Titel ist, wird es definitiv die relevanten Optionen zeigen. Folgendes wird Apps wie E-Mail, Twitter, Facebook, assignToContact anzeigen, in der Rolle speichern, drucken, kopieren usw. –

Antwort

12

Ich habe die Videodatei im Dokumentverzeichnis gespeichert und mithilfe der Datei-URL aus dem Dokumentverzeichnis das Video zur Freigabe per E-Mail angehängt.

[[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]; 
    } 
}]; 

habe ich auch requestExportSessionForVideo Methode ein Video zu exportieren Verzeichnis zu dokumentieren, die auch funktionierte.

[[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

Haben Sie zufällig einen Ausschnitt davon, wie Sie 'requestexportSessionForVideo' verwendet haben? Ich versuche es zu verwenden, aber die Ausgabe-URL kommt immer als Null. Vielen Dank! – batkru

+0

Siehe den bearbeiteten Post. – gabbler

+0

Amaaaaaaaaaaazing! Ich hatte so viel Zeit damit verbracht, ohne Glück zu versuchen! Vielen Dank – batkru