我在导航控制器中有两个视图控制器,我们可以从第一个视图控制器导航到第二个视图控制器。
音频播放代码位于第二个视图控制器的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模拟器上自动播放,我想知道是否有任何方法可以自定义。
答案 0 :(得分:0)
'player-AVAudioPlayer'在viewcontroller 2中声明。因此,当弹出viewcontroller 2时,它将与viewcontroller一起释放。
将“player-AVAudioPlayer”对象创建为单个对象,并将其存储在AppDelegate / session数据中。现在,无论您需要播放音频,只需从那里访问此对象并播放即可。这样,即使弹出了viewcontroller 2,它也会继续播放。