所以我有一个Fragment调用以下启动摄像头的方法:
private void launchCamera() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
我期望在我的片段中收到此方法中的图片数据:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (!(resultCode == RESULT_OK)) return;
if (requestCode == REQUEST_IMAGE_CAPTURE || requestCode == REQUEST_GALLERY_IMAGE) {
Uri imageURI = data.getData();
// do something
}
}
然而,在我拍照并确认之后,该应用程序将转到我的启动器。在onActivityResult方法中设置断点后,应用程序甚至在崩溃之前甚至都没有达到此方法。我已经授权确保在清单和运行时都授予所有权限。
在应用程序日志和设备日志中,此崩溃的Logcat也没有输出。我也在我的设备(Moto G5 Plus)上进行了测试。 Pixel XL API 26仿真器;两者都有相同的结果。
答案 0 :(得分:0)
我认为您需要致电super.onActivityResult()
。
该片段是进行startActivityForResult()调用的片段,但是活动获得了处理结果的第一步,因此您需要实现super.onActivityResult()
以使片段处理结果。
答案 1 :(得分:0)
应用程序立即崩溃到我的启动器
不,相机应用程序立即启动发射器。显然,这个相机应用程序的开发人员写了它,以便在用户完成拍照后调出主屏幕。当然,这是一个错误,但你无能为力。
当你喜欢图片时使用mylist = [a, b, c, d]
counter = {a:mylist.count(a) for a in mylist}
if 1 in counter.values() and len(counter) == 2:
print("three are the same")
,但是如果你没有得到它,请不要介意,因为你正在集成的数百个相机应用程序中的一些错误。否则,请使用相机库(Fotoapparat,CameraKit-Android等)直接在您自己的应用中拍摄照片。
此外,FWIW,ACTION_IMAGE_CAPTURE
未返回ACTION_IMAGE_CAPTURE
,因此您的Uri
代码无论如何都无效。根据您的onActivityResult()
ACTION_IMAGE_CAPTURE
个特定配置,在Intent
中,onActivityResult()
将返回代表缩略图大小图片的data.getParcelableExtra("data")
。
答案 2 :(得分:0)
我相信这是 Android: Activity getting Destroyed after calling Camera Intent 的另一种表现形式。
最重要的是,系统会从头开始重新启动您的应用,并且您的活动已创建,但有可能恢复其状态。
所以你必须实现onRestoreInstanceState()。我不确定你能否保证片段能够及时接收onActiviyResult(),所以为了安全起见,我更喜欢在活动中处理捕获的图像。
答案 3 :(得分:0)
所以这个问题实际上是因为我附加了活动的意图标志。我的活动是使用import { Injectable, Inject, Injector } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Http, URLSearchParams } from '@angular/http';
import { APP_BASE_HREF } from '@angular/common';
import { ORIGIN_URL } from '@nguniversal/aspnetcore-engine';
import { Observable } from 'rxjs/Observable';
import { LogEntry } from './../models/Logging/LogEntry';
@Injectable()
export class LoggingHttpService {
private baseUrl: string;
constructor(private http: Http, private injector: Injector) {
this.baseUrl = this.injector.get(ORIGIN_URL);
}
private static readonly LOG_INFORMATION_URL: string = '/api/logging/loginformation';
private static readonly LOG_DEBUG_URL: string = '/api/logging/logdebug';
private static readonly LOG_WARNING_URL: string = '/api/logging/logwarning';
private static readonly LOG_ERROR_URL: string = '/api/logging/logerror';
logInformation(logEntry: LogEntry) {
return this.http.post(this.baseUrl + LoggingHttpService.LOG_INFORMATION_URL, logEntry);
}
logDebug(logEntry: LogEntry) {
return this.http.post(this.baseUrl + LoggingHttpService.LOG_DEBUG_URL, logEntry);
}
logWarning(logEntry: LogEntry) {
return this.http.post(this.baseUrl + LoggingHttpService.LOG_WARNING_URL, logEntry);
}
logError(logEntry: LogEntry) {
return this.http.post(this.baseUrl + LoggingHttpService.LOG_ERROR_URL, logEntry);
}
}
意图标记启动的,这显然阻止了从NO_HISTORY
调用返回时重新创建它。