如何在iOS上关闭视图控制器后继续播放音频?

时间:2016-05-19 08:50:11

标签: ios audio

我在导航控制器中有两个视图控制器,我们可以从第一个视图控制器导航到第二个视图控制器。

音频播放代码位于第二个视图控制器的viewDidLoad方法中,如下所示:

File f = createImageFile(bitmap);
String[] orientationColumn = {MediaStore.Images.Media.ORIENTATION};
Cursor cur = context.getContentResolver().query(Uri.parse(f.toString()), orientationColumn, null, null, null);
int orientation = -1;
if (cur != null && cur.moveToFirst()) {
   orientation = cur.getInt(cur.getColumnIndex(orientationColumn[0]));
}
Matrix matrix = new Matrix();
matrix.postRotate(orientation);

private static File createImageFile(Bitmap bitmap) {
    //create a file to write bitmap data
    String fullPath = Environment.getExternalStorageDirectory().getAbsolutePath();
    File f = new File(fullPath, "image"+ System.currentTimeMillis()+".jpg");
    try {
        f.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();
    }

    //Convert bitmap to byte array
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    if (bitmap != null) {
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100 /*ignored for PNG*/, bos);
    }
    byte[] bitmapdata = bos.toByteArray();

    //write the bytes in file
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(f);
        fos.write(bitmapdata);
        fos.flush();
        fos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return f;
}

我的问题是,当加载第二个视图控制器时,音频正在播放,但当我关闭第二个视图控制器并返回第一个视图控制器时,音频停止播放。

我直接尝试了play()方法和dispatch_async(dispatch_get_main_queue())方法,但是当第二个视图控制器被解除时,音频无法继续播放。

而且,音频可以在Xcode模拟器上自动播放,我想知道是否有任何方法可以自定义。

1 个答案:

答案 0 :(得分:0)

'player-AVAudioPlayer'在viewcontroller 2中声明。因此,当弹出viewcontroller 2时,它将与viewcontroller一起释放。

将“player-AVAudioPlayer”对象创建为单个对象,并将其存储在AppDelegate / session数据中。现在,无论您需要播放音频,只需从那里访问此对象并播放即可。这样,即使弹出了viewcontroller 2,它也会继续播放。