MediaProjection.registerCallback(mMediaProjectionCallback,null)会在线程中运行时导致RuntimeException,为什么?

时间:2015-11-06 01:07:42

标签: android

我在一个线程中调用mRecordHelper.StartRecord(mRecordArg,myResultCode,mydata),它显示以下错误,我认为@gen.coroutine def post(self): input_dict = ... result = yield executor.submit(expensive_function, input_dict) 会导致错误。

我该如何解决?谢谢!

MediaProjection.registerCallback(mMediaProjectionCallback, null)

致电代码

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
            at android.os.Handler.<init>(Handler.java:200)
            at android.os.Handler.<init>(Handler.java:114)
            at android.media.projection.MediaProjection.registerCallback(MediaProjection.java:80)

RecordHelper.cs

 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (resultCode != RESULT_OK) {
            Toast.makeText(this, "Screen Cast Permission Denied", Toast.LENGTH_SHORT).show();
            return;
        }

        final MPublicPar.RecordArg mRecordArg =new MPublicPar().new RecordArg(mContext);
        final int myResultCode=resultCode;
        final Intent mydata=data;

        new Thread(new Runnable() {
            public void run() {
                mRecordHelper.StartRecord(mRecordArg,myResultCode,mydata);
            }
        }).start();

    }

1 个答案:

答案 0 :(得分:1)

或者:

  • 在主应用程序主题上调用registerCallback(),或

  • 提供Handler作为registerCallback()的第二个参数,或(可能)

  • registerCallback()

  • 中致电HandlerThread

(在这种情况下,我从未尝试过第三种方法,更喜欢使用其他替代方案之一,但我认为它会起作用)