Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何通过UIActivityViewController与Swift共享.mp3文件?_Ios_Iphone_Swift_Uiactivityviewcontroller - Fatal编程技术网

Ios 如何通过UIActivityViewController与Swift共享.mp3文件?

Ios 如何通过UIActivityViewController与Swift共享.mp3文件?,ios,iphone,swift,uiactivityviewcontroller,Ios,Iphone,Swift,Uiactivityviewcontroller,在我的应用程序中,我下载了一个扩展名为.mp3的音乐文件,并将其保存到DocumentDirectory。检索url并创建NSData变量后,通过UIActivityViewController在电报上共享它。电报上出现的文件没有分机,无法播放。它的名字是“文件”。我想让音乐在电报上看起来像“test.mp3”。这是我的密码: var paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask,

在我的应用程序中,我下载了一个扩展名为.mp3的音乐文件,并将其保存到DocumentDirectory。检索url并创建NSData变量后,通过UIActivityViewController在电报上共享它。电报上出现的文件没有分机,无法播放。它的名字是“文件”。我想让音乐在电报上看起来像“test.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)

我以前从未使用过电报API,但您需要做的是创建一个自定义的
UIActivity
,它将存储从本地检索歌曲的信息,这样您就可以对
UIActivity
的选择做出反应,并使用歌曲数据调用电报API

1)通过子类化
UIActivity
创建自定义活动

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() {

    }

}
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)]
}

2)创建一个类方法,该类方法将实例化您的电报
UIActivity

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() {

    }

}
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()
方法。在这里,您可以获取歌曲路径的数据,并拨打电话将其发送到


我以前从未使用过电报API,但您需要做的是创建一个自定义的
UIActivity
,它将存储从本地检索歌曲的信息,这样您就可以对
UIActivity
的选择做出反应,并使用歌曲数据调用电报API

1)通过子类化
UIActivity
创建自定义活动

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() {

    }

}
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)]
}

2)创建一个类方法,该类方法将实例化您的电报
UIActivity

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() {

    }

}
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()
方法。在这里,您可以获取歌曲路径的数据,并拨打电话将其发送到