Я столкнулся с той же проблемой:
E/AndroidRuntime: FATAL EXCEPTION: Thread-4
Process: com.example.languoguang.welcomeapp, PID: 4724
java.lang.RuntimeException: Can't toast on a thread that has not called Looper.prepare()
at android.widget.Toast$TN.<init>(Toast.java:393)
at android.widget.Toast.<init>(Toast.java:117)
at android.widget.Toast.makeText(Toast.java:280)
at android.widget.Toast.makeText(Toast.java:270)
at com.example.languoguang.welcomeapp.MainActivity$1.run(MainActivity.java:51)
at java.lang.Thread.run(Thread.java:764)
I/Process: Sending signal. PID: 4724 SIG: 9
Application terminated.
Before: onCreate function
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Toast.makeText(getBaseContext(), "Thread", Toast.LENGTH_LONG).show();
}
});
thread.start();
После: onCreate function
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getBaseContext(), "Thread", Toast.LENGTH_LONG).show();
}
});
сработало.
Вы должны добавить инфраструктуру MobileCoreServices в проект, а затем импортировать ее:
#import <MobileCoreServices/MobileCoreServices.h>
Это заставит проблему уйти.
swift
import MobileCoreServices
Цель c
#import <MobileCoreServices/MobileCoreServices.h>
Я новичок в iOS-разработке и xcode и потратил некоторое время, пытаясь выяснить, почему просто импорт не работал. После выяснения проблемы с более опытным членом моей команды я узнал, что вы не только должны включать
#import <MobileCoreServices/MobileCoreServices.h>
, но также должны связывать двоичные файлы с библиотекой инфраструктуры MobileCoreServices с фазами сборки ваш проект.
Надеюсь, это поможет! Я обязательно нуждался в этой информации, когда я это делал.
#import <MobileCoreServices/MobileCoreServices.h>
Ответ Swift 4 с кодом видеокамеры и делегатом imagePicker:
import MobileCoreServices
Открыть видеокамеру
@IBAction func openVideoCamera(_ sender: Any) {
if UIImagePickerController.isSourceTypeAvailable(.camera) {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .camera
imagePicker.mediaTypes = [kUTTypeMovie as String]
imagePicker.videoMaximumDuration = 10 // or whatever you want
imagePicker.videoQuality = .typeMedium
imagePicker.allowsEditing = false
present(imagePicker, animated: true, completion: nil)
}
Делегат ImagePicker:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let mediaType = info[UIImagePickerControllerMediaType] as AnyObject
if mediaType as! String == kUTTypeMovie as String {
let videoURL = info[UIImagePickerControllerMediaURL] as? URL
print("VIDEO URL: \(videoURL!)")
}
dismiss(animated: true, completion: nil)
}