Ios 如何通过UIActivityViewController与Swift共享.mp3文件?
在我的应用程序中,我下载了一个扩展名为.mp3的音乐文件,并将其保存到DocumentDirectory。检索url并创建NSData变量后,通过UIActivityViewController在电报上共享它。电报上出现的文件没有分机,无法播放。它的名字是“文件”。我想让音乐在电报上看起来像“test.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,
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()
方法。在这里,您可以获取歌曲路径的数据,并拨打电话将其发送到