本机离子网络状态不适用于我的代码

时间:2018-07-18 07:07:05

标签: angular ionic-framework

我想在所有页面都没有连接和/或连接时显示警报消息,但是它不起作用。显示网络类型有效,但没有显示警告消息。

目标是在连接和断开APP时显示消息。我正在关注https://ionicframework.com/docs/native/network/

这是我在import Foundation import ReplayKit import AVKit import Photos class ScreenRecorder { var assetWriter:AVAssetWriter! var videoInput:AVAssetWriterInput! var audioInput:AVAssetWriterInput! var startSesstion = false // let viewOverlay = WindowUtil() //MARK: Screen Recording func startRecording(withFileName fileName: String, recordingHandler:@escaping (Error?)-> Void) { if #available(iOS 11.0, *) { let fileURL = URL(fileURLWithPath: ReplayFileUtil.filePath(fileName)) assetWriter = try! AVAssetWriter(outputURL: fileURL, fileType: AVFileType.mp4) let videoOutputSettings: Dictionary<String, Any> = [ AVVideoCodecKey : AVVideoCodecType.h264, AVVideoWidthKey : UIScreen.main.bounds.size.width, AVVideoHeightKey : UIScreen.main.bounds.size.height, // AVVideoCompressionPropertiesKey : [ // AVVideoAverageBitRateKey :425000, //96000 // AVVideoMaxKeyFrameIntervalKey : 1 // ] ]; var channelLayout = AudioChannelLayout.init() channelLayout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_5_1_D let audioOutputSettings: [String : Any] = [ AVNumberOfChannelsKey: 6, AVFormatIDKey: kAudioFormatMPEG4AAC_HE, AVSampleRateKey: 44100, AVChannelLayoutKey: NSData(bytes: &channelLayout, length: MemoryLayout.size(ofValue: channelLayout)), ] videoInput = AVAssetWriterInput(mediaType: AVMediaType.video,outputSettings: videoOutputSettings) audioInput = AVAssetWriterInput(mediaType: AVMediaType.audio,outputSettings: audioOutputSettings) videoInput.expectsMediaDataInRealTime = true audioInput.expectsMediaDataInRealTime = true assetWriter.add(videoInput) assetWriter.add(audioInput) RPScreenRecorder.shared().startCapture(handler: { (sample, bufferType, error) in recordingHandler(error) if CMSampleBufferDataIsReady(sample) { DispatchQueue.main.async { [weak self] in if self?.assetWriter.status == AVAssetWriterStatus.unknown { print("AVAssetWriterStatus.unknown") if !(self?.assetWriter.startWriting())! { return } self?.assetWriter.startSession(atSourceTime: CMSampleBufferGetPresentationTimeStamp(sample)) self?.startSesstion = true } // if self.assetWriter.status == AVAssetWriterStatus.unknown // { // self.assetWriter.startWriting() // self.assetWriter.startSession(atSourceTime: CMSampleBufferGetPresentationTimeStamp(sample)) // self?.startSesstion = true } if self.assetWriter.status == AVAssetWriterStatus.failed { print("Error occured, status = \(String(describing: self.assetWriter.status.rawValue)), \(String(describing: self.assetWriter.error!.localizedDescription)) \(String(describing: self.assetWriter.error))") recordingHandler(self.assetWriter.error) return } if (bufferType == .video) { if(self.videoInput.isReadyForMoreMediaData) && self.startSesstion { self.videoInput.append(sample) } } if (bufferType == .audioApp) { if self.audioInput.isReadyForMoreMediaData { //print("Audio Buffer Came") self.audioInput.append(sample) } } } }) { (error) in recordingHandler(error) // debugPrint(error) } } else { // Fallback on earlier versions } } func stopRecording(isBack: Bool, aPathName: String ,handler: @escaping (Error?) -> Void) { //var isSucessFullsave = false if #available(iOS 11.0, *) { self.startSesstion = false RPScreenRecorder.shared().stopCapture{ (error) in self.videoInput.markAsFinished() self.audioInput.markAsFinished() handler(error) if error == nil{ self.assetWriter.finishWriting{ self.startSesstion = false print(ReplayFileUtil.fetchAllReplays()) if !isBack{ self.PhotosSaveWithAurtorise(aPathName: aPathName) }else{ self.deleteDirectory() } } }else{ self.deleteDirectory() } } }else { // print("Fallback on earlier versions") } } func PhotosSaveWithAurtorise(aPathName: String) { if PHPhotoLibrary.authorizationStatus() == .authorized { self.SaveToCamera(aPathName: aPathName) } else { PHPhotoLibrary.requestAuthorization({ (status) in if status == .authorized { self.SaveToCamera(aPathName: aPathName) } }) } } func SaveToCamera(aPathName: String){ PHPhotoLibrary.shared().performChanges({ PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: (ReplayFileUtil.fetchAllReplays().last)!) }) { saved, error in if saved { addScreenCaptureVideo(aPath: aPathName) print("Save") }else{ NotificationCenter.default.post(name: NSNotification.Name(rawValue: "isScreenRecordFaildToSave"), object: nil) print("error to save - \(error)") } } } func deleteDirectory() { ReplayFileUtil.delete() } } 中的代码

app.component.ts

谢谢

1 个答案:

答案 0 :(得分:1)

在这里,您可以实现可在设备(cordova)和pwa模式下均可使用的“网络监视器”。在您的情况下,您正在取消订阅应保留的订阅。

  // DETECT DEVICE/BROWSER:
  this.appIsOnDevice = !this.platform.url().startsWith('http');

  // INIT NETWORK MONITOR:
  initNetworkMonitor() {
    // check if we are on device or if its a browser
    if (this.appIsOnDevice) {
      // watch network for a disconnect
      this.disconnectSubscription = this.network
        .onDisconnect()
        .subscribe(() => {
          console.log("network disconnected:(");
          // do alert here
        });
      // watch network for a connection
      this.connectSubscription = this.network.onConnect().subscribe(() => {
        console.log("network connected!");
        // app got back online, do logic here
        if (this.network.type === "wifi") {
          console.log("we got a wifi connection, woohoo!");
        }
      });
    } else {
      this.browserOffline = Observable.fromEvent(window, "offline").subscribe(
        () => {
          // go offline logic here
        }
      );
      this.browserOnline = Observable.fromEvent(window, "online").subscribe(
        () => {
          // go back online
        }
      );
    }
  }