从java插件在nativescript中打开活动
我想用java为nativescript程序创建一个摄像头插件,但我有一个问题:我无法成功打开我的摄像头 下面是我的java代码:从java插件在nativescript中打开活动,java,android-intent,plugins,nativescript-angular,Java,Android Intent,Plugins,Nativescript Angular,我想用java为nativescript程序创建一个摄像头插件,但我有一个问题:我无法成功打开我的摄像头 下面是我的java代码: package org.nativescript.moi.myphotoplugin; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Environment; import android.os.Str
package org.nativescript.moi.myphotoplugin;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.os.StrictMode;
import android.provider.MediaStore;
import android.util.Log;
import android.view.SurfaceView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.io.File;
public class Photo extends AppCompatActivity {
private static final int REQUEST_ID_READ_WRITE_PERMISSION = 99;
private static final int REQUEST_ID_IMAGE_CAPTURE = 100;
public void captureImage() {
// Create an implicit intent, for image capture.
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// The external storage directory.
File dir = Environment.getExternalStorageDirectory();
if (!dir.exists()) {
dir.mkdirs();
}
// file:///storage/emulated/0/myvideo.mp4
String savePath = dir.getAbsolutePath() + "/mypicture.jpeg";
File pictureFile = new File(savePath);
Uri pictureUri = Uri.fromFile(pictureFile);
// Specify where to save video files.
intent.setData(pictureUri);
intent.putExtra("MediaStore.EXTRA_OUTPUT", pictureUri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
// ================================================================================================
// To Fix Error (**)
// ================================================================================================
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
// ================================================================================================
// You may get an Error (**) If your app targets API 24+
// "android.os.FileUriExposedException: file:///storage/emulated/0/xxx exposed beyond app through.."
// Explanation: https://stackoverflow.com/questions/38200282
// ================================================================================================
// Start camera and wait for the results.
startActivityForResult(intent, REQUEST_ID_IMAGE_CAPTURE);
}
// When results returned
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_ID_IMAGE_CAPTURE) {
if (resultCode == RESULT_OK) {
Bitmap bp = (Bitmap) data.getExtras().get("data");
System.out.println(bp);
Uri pictureUri = data.getData();
System.out.println(pictureUri);
//this.imageView.setImageBitmap(bp);
Log.i("MyLog", "Picture saved to: " + pictureUri);
Toast.makeText(this, "Picture saved to:\n" +
pictureUri, Toast.LENGTH_LONG).show();
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(this, "Action canceled", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "Action Failed", Toast.LENGTH_LONG).show();
}
}
}
}
下面是插件my index.js的代码:
import { android } from "application";
export function takePhoto() {
var photo = new org.nativescript.moi.myphotoplugin.Photo();
console.log("Je suis passé par là: takePhoto");
photo.captureImage();
console.log("Je suis passé par là: fin takePhoto");
};
并遵循nativescript(angular)组件的代码:
import { Component, OnInit } from "@angular/core";
import * as app from "tns-core-modules/application";
import { Item } from "./item";
import { ItemService } from "./item.service";
import * as ToasterMessage from "nativescript-toaster";
import * as Photo from "nativescript-photo";
declare var org:any;
declare var com: any;
@Component({
selector: "ns-items",
templateUrl: "./items.component.html"
})
export class ItemsComponent {
constructor(private itemService: ItemService) { }
pageLoaded() {
console.log("bouh");
//var context = app.android.context;
console.log("bouh2");
//ToasterMessage.showToast();
Photo.takePhoto();
}
}
以下是来自终端的错误:
ERROR Error: java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
我不知道错误的确切位置,也没有在互联网上找到帮助
提前谢谢你