Java 为什么不在Android上的Activity中调用ActivityResult

Java 为什么不在Android上的Activity中调用ActivityResult,java,android,service,Java,Android,Service,在我的应用程序中,我需要一个录制屏幕,为此我编写了以下代码。 运行应用程序后,不会调用我的记录器服务,并且在使用Log.e后,它仍然不会显示日志? 我将录制代码写入onActivityResult 为此,我使用了countDownTimer,我想在计时器完成后开始录制。 为了检查它是否工作,我使用了Log.e,它显示一个进入onFinishedcode的日志(用于计时器),但不显示任何进入onactivityresult的Logs 我的活动代码: public class RecordingAc

在我的应用程序中,我需要一个录制屏幕,为此我编写了以下代码。
运行应用程序后,不会调用我的记录器服务,并且在使用
Log.e
后,它仍然不会显示日志?
我将录制代码写入
onActivityResult

为此,我使用了
countDownTimer
,我想在计时器完成后开始录制。

为了检查它是否工作,我使用了
Log.e
,它显示一个进入
onFinished
code的日志(用于计时器),但不显示任何进入
onactivityresult的
Log
s

我的活动代码:

public class RecordingActivity extends BaseActivity {

    private TextView txtTesterCounter;
    Thread thread;
    private int counter;
    private CountDownTimer countDownTimer;
    private MediaProjection mMediaProjection;
    private MediaProjectionManager mProjectionManager;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tester_tutorial_count_down);

        init();

        reverseTimer(4).start();
        //Create video direction
        createDir();
    }

    private void init() {
        txtTesterCounter = findViewById(R.id.txtTesterCounter);
        counter = 3;
        //Acquiring media projection service to start screen mirroring
        mProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
    }

    private CountDownTimer reverseTimer(int second) {
        return countDownTimer = new CountDownTimer(second * 1000, 1000) {
            @SuppressLint("SetTextI18n")
            @Override
            public void onTick(long millisUntilFinished) {
                if (millisUntilFinished <= 800) {
                    onFinish();
                } else {
                    int second = (int) (millisUntilFinished / 1000);
                    txtTesterCounter.setText(App.enToFa(second + ""));
                }
            }

            @Override
            public void onFinish() {
                if (mMediaProjection == null && !isServiceRunning(RecorderService.class)) {
                    //Request Screen recording permission
                    startActivityForResult(mProjectionManager.createScreenCaptureIntent(), ConstKeys.SCREEN_RECORD_REQUEST_CODE);
                    Log.e("RecordingLog","OnFinished");
                } else if (isServiceRunning(RecorderService.class)) {
                    //stop recording if the service is already active and recording
                }
                finish();
            }
        };
    }

    //Create application directory
    public static void createDir() {
        File appDir = new File(Environment.getExternalStorageDirectory() + File.separator + ConstKeys.APPDIR);
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) && !appDir.isDirectory()) {
            appDir.mkdirs();
        }
    }

    private boolean isServiceRunning(Class<?> serviceClass) {
        ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
            if (serviceClass.getName().equals(service.service.getClassName())) {
                return true;
            }
        }
        return false;
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.e("RecordingLog","OnActivityResult");
        //The user has denied permission for screen mirroring. Let's notify the user
        if (resultCode == RESULT_CANCELED && requestCode == ConstKeys.SCREEN_RECORD_REQUEST_CODE) {
            return;
        }

        Intent recorderService = new Intent(this, RecorderService.class);
        recorderService.setAction(ConstKeys.SCREEN_RECORDING_START);
        recorderService.putExtra(ConstKeys.RECORDER_INTENT_DATA, data);
        recorderService.putExtra(ConstKeys.RECORDER_INTENT_RESULT, resultCode);
        startService(recorderService);
        Log.e("RecordingLog","Recorder Service");
    }
}
公共类录制活动扩展了BaseActivity{
私有文本视图txtTesterCounter;
螺纹;
专用int计数器;
私人倒计时;
私有媒体的再投资;
私有媒体项目管理器mProjectionManager;
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u tester\u tutorial\u count\u down);
init();
反转器(4.start();
//创建视频方向
createDir();
}
私有void init(){
txtTesterCounter=findViewById(R.id.txtTesterCounter);
计数器=3;
//获取媒体投影服务以启动屏幕镜像
mProjectionManager=(MediaProjectionManager)getSystemService(Context.MEDIA\u PROJECTION\u SERVICE);
}
专用倒计时反转器(整数秒){
返回倒计时=新倒计时(秒*1000,1000){
@SuppressLint(“SetTextI18n”)
@凌驾
公共void onTick(长毫秒未完成){

在子活动完成时调用if(millisuntiltfinished
onActivityResult
。在您的情况下,在启动活动后,您将完成
录制活动

@Override
public void onFinish() {
    if (mMediaProjection == null && !isServiceRunning(RecorderService.class)) {
        //Request Screen recording permission
        startActivityForResult(mProjectionManager.createScreenCaptureIntent(), ConstKeys.SCREEN_RECORD_REQUEST_CODE);
        Log.e("RecordingLog","OnFinished");
    } else if (isServiceRunning(RecorderService.class)) {
        //stop recording if the service is already active and recording
    }
    finish(); // what does this method do?
}

我假设finish方法完成了您的活动。如果它这样做,将永远不会调用
onActivityResult
,因为您完成了父活动。

使用debug来解决问题。可能您的ConstKeys.SCREEN\u RECORD\u REQUEST\u代码没有到达onActivityResult。在
中调用的
finish
方法是什么onFinish
?@DeepakRor,我如何修复它?你能帮我吗?@faranjit,因为我想在计时器完成时关闭当前活动\n我想在计时器完成时关闭活动,但你也想在活动结果上可访问。选择一个!如果你在计时器完成后在活动结果上完成录制活动我不会被叫的。