如何解决通过Java插件在nativescript中打开活动
我想用Java为本地脚本程序创建一个相机插件,但是我有一个问题:我无法成功打开相机。
以下是我的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.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();
}
}
}
}
以下是我的插件的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");
};
并遵循我的本机脚本(角度)组件的代码:
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
我不知道错误的确切位置,也找不到互联网上的帮助。
先谢谢您。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。