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(millisuntiltfinishedonActivityResult
。在您的情况下,在启动活动后,您将完成录制活动
@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我想在计时器完成时关闭活动,但你也想在活动结果上可访问。选择一个!如果你在计时器完成后在活动结果上完成录制活动我不会被叫的。