Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从java插件在nativescript中打开活动_Java_Android Intent_Plugins_Nativescript Angular - Fatal编程技术网

从java插件在nativescript中打开活动

从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

我想用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.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
我不知道错误的确切位置,也没有在互联网上找到帮助

提前谢谢你