我想使用官方GoPro WSDK访问GoPro Hero 4 silver,但在尝试使用getMediaGateway()访问它时会遇到运行时异常。我是Android开发的新手,在GoPro开发人员文档中,我读到你必须在后台线程中执行此操作,但我无法让它工作。我必须用.postDelayed()来做。这是另一个故事,目前并不重要。我用官方的GoPro SDK文档中描述的方式做得很疯狂,但是我得到了我在代码片段后看到的异常。简而言之:摄像机录制视频(使用lopping模式),3秒后应该访问SD卡。我发现问题是这个cameraresult-call,但无法修复它,即使我用.isSuccess()测试它。
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// [...]
// App shutter-button onClickListener
mBtnShutter.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(final View v) {
doCameraTasks(3,v);
}
});
}
// Press shutter after n seconds and extract both video-parts
private void doCameraTasks(int seconds, final View v) {
// On
getActivity().startService(C2Service.newToggleShutterCommand(v.getContext(),
mGoProCamera.getGuid()));
v.postDelayed(new Runnable() {
@Override
public void run() {
// Off after n seconds
getActivity().startService(C2Service.newToggleShutterCommand(v.getContext(),
mGoProCamera.getGuid()));
}
},seconds*1000);
v.postDelayed(new Runnable() {
@Override
public void run() {
CameraCommandResult<MediaResponse<GpCameraMedia>> cameraresult = mGoProCamera.getMediaGateway().getMediaList();
if(cameraresult.isSuccess()) {
MediaResponse<GpCameraMedia> mediaResponse = cameraresult.getData();
List<GpCameraMedia> myMediaList = mediaResponse.getMedia();
String cardID = mediaResponse.getSdCardGuid();
Log.d("sdcard_id",cardID);
}
}
},(seconds+2)*1000);
}
例外:
com.gopro.wsdksample E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.gopro.wsdksample, PID: 26823
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1148)
at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:249)
at libcore.io.IoBridge.recvfrom(IoBridge.java:553)
at java.net.PlainSocketImpl.read(PlainSocketImpl.java:549)
at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:42)
at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:253)
at com.android.okio.Okio$2.read(Okio.java:113)
at com.android.okio.RealBufferedSource.indexOf(RealBufferedSource.java:147)
at com.android.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:94)
at com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:175)
at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:101)
at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:616)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:379)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:323)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:491)
at com.gopro.wsdk.domain.camera.SingleConnectionHttpClient.send(SingleConnectionHttpClient.java:60)
at com.gopro.wsdk.domain.camera.network.wifi.GpControlHttpCommandSender.send(GpControlHttpCommandSender.java:81)
at com.gopro.wsdk.domain.camera.operation.media.GetCameraMediaCommand.execute(GetCameraMediaCommand.java:64)
at com.gopro.wsdk.domain.camera.network.wifi.GpControlHttpCommandSender.process(GpControlHttpCommandSender.java:76)
at com.gopro.wsdk.domain.camera.sender.CommandSenderManager.process(CommandSenderManager.java:148)
at com.gopro.wsdk.domain.camera.GoProCamera.process(GoProCamera.java:426)
at com.gopro.wsdk.domain.camera.operation.media.GpMediaGateway.getMediaList(GpMediaGateway.java:85)
at com.gopro.wsdksample.features.ControlFragment$3.run(ControlFragment.java:112)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5306)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)