2016-05-23 14 views
1

私のアプリでは、拡張子が.mp3の音楽ファイルをダウンロードしてDocumentDirectoryに保存します。 urlを取得してNSData変数を作成したら、UIActivityViewControllerによってTelegram上で共有します。テレグラムに登場したファイルは拡張子がなく、再生されません。その名前は "file"です。テレグラムに音楽が "test.mp3"のように表示されるようにします。ここに私のコードは次のとおりです。SwiftでUIActivityViewControllerが.mp3ファイルを共有する方法は?

var paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0].stringByAppendingString("/test.mp3")      

let soundData=NSData(contentsOfFile: paths) 

let r = NSURL(fileURLWithPath: paths) 

let activityViewController = UIActivityViewController(activityItems: [r] , applicationActivities: nil) 

答えて

0

私は前に電報のAPIを使用したことがありませんが、何あなたがする必要があるだろうことはあなたの地元から曲を取得するための情報を格納しますカスタムUIActivityを作成し、これを使用することですUIActivityの選択に反応して、テレグラムAPIに曲データを呼び出します。

1)UIActivityをサブクラス化してカスタムアクティビティを作成します。


2)

class YourCustomActivity: UIActivity { 

    var title: String! 
    var image: UIImage? 
    var type:UIActivityType! 
    var path: String! 


    init(title: String, image: UIImage?, path: String) { 
     super.init() 
     self.path = path 
     self.image = image 
     self.title = title 
     type = UIActivityType(rawValue: title) 
    } 

    override var activityType: UIActivityType { 
     return self.type 
    } 

    override var activityTitle: String { 
     return self.title 
    } 

    override var activityImage: UIImage? { 
     return self.image 
    } 

    var activityCategory: UIActivityCategory { 
     return .share 
    } 

    override func canPerform(withActivityItems activityItems: [Any]) -> Bool { 
     return true 
    } 

    override func prepare(withActivityItems activityItems: [Any]) { 

    } 

    override func perform() { 

    } 

} 

はあなたの電報 UIActivityをインスタンス化するクラスのメソッドを作成します。

class func getTelegramActivitiesFor(path: String) -> [YourCustomActivity] { 
    // You have to supply your own "Telegram_Logo" 
    return [YourCustomActivity(title: "Telegram", image: UIImage.init(named: "Telegram_Logo", in: Bundle.main, compatibleWith: nil), path: path)] 
} 

3)は、あなたの電報の活動であなたのUIActivityControllerをインスタンス化します。

let yourSongPath = "" // Get path to your song in documents 

let activities = YourCustomActivity.getTelegramActivitiesFor(path: yourSongPath) 

let activityVC = UIActivityViewController(activityItems: activityImages, applicationActivities: activities) 
activityVC.modalPresentationStyle = .popover 
activityVC.popoverPresentationController?.barButtonItem = actionButton 
present(activityVC, animated: true, completion: nil) 

4)YourCustomActivityは、そのperform()方法を実行する選択された場合。ここでは、曲のパスのデータを取得し、Telegramに送信するための呼び出しを行います。

override func perform() { 
    do { 

     let songData = try Data(contentsOf: self.path) 

     // Make the API call to Telegram with your song's data... 

    } 
    catch { 
     print("UNABLE TO RETRIEVE SONG") 
    } 
} 
関連する問題