如何修复 Android 图像捕捉应用崩溃问题。

huangapple 未分类评论42阅读模式
英文:

How do I fix Android Image Capture App Crashes

问题

以下是您要翻译的内容:

"I'm not sure what is going on. I click the button to take the image and my app closes.

I'm attempting to make an app to capture and use an image. I haven't even been able to capture the image.

I get the following message in log cat:

FATAL EXCEPTION: main
Process: com.example.fixmyphysics, PID: 23526
java.lang.IllegalArgumentException: Missing android.support.FILE_PROVIDER_PATHS meta-data
at androidx.core.content.FileProvider.parsePathStrategy(FileProvider.java:613)
at androidx.core.content.FileProvider.getPathStrategy(FileProvider.java:579)
at androidx.core.content.FileProvider.getUriForFile(FileProvider.java:417)
at com.example.fixmyphysics.MainActivity.dispatchPictureTakerAction(MainActivity.java:67)
at com.example.fixmyphysics.MainActivity.access$000(MainActivity.java:27)
at com.example.fixmyphysics.MainActivity$1.onClick(MainActivity.java:44)
at android.view.View.performClick(View.java:7356)
at android.widget.TextView.performClick(TextView.java:14230)
at android.view.View.performClickInternal(View.java:7322)
at android.view.View.access$3200(View.java:846)
at android.view.View$PerformClick.run(View.java:27804)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7073)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)

MainActivity.java"

AndroidMainifest.xml"

英文:

I'm not sure what is going on. I click the button to take the image and my app closes.

I'm attempting to make an app to capture and use an image. I haven't even been able to capture the image.

I get the following message in log cat:

FATAL EXCEPTION: main
Process: com.example.fixmyphysics, PID: 23526
java.lang.IllegalArgumentException: Missing android.support.FILE_PROVIDER_PATHS meta-data
    at androidx.core.content.FileProvider.parsePathStrategy(FileProvider.java:613)
    at androidx.core.content.FileProvider.getPathStrategy(FileProvider.java:579)
    at androidx.core.content.FileProvider.getUriForFile(FileProvider.java:417)
    at com.example.fixmyphysics.MainActivity.dispatchPictureTakerAction(MainActivity.java:67)
    at com.example.fixmyphysics.MainActivity.access$000(MainActivity.java:27)
    at com.example.fixmyphysics.MainActivity$1.onClick(MainActivity.java:44)
    at android.view.View.performClick(View.java:7356)
    at android.widget.TextView.performClick(TextView.java:14230)
    at android.view.View.performClickInternal(View.java:7322)
    at android.view.View.access$3200(View.java:846)
    at android.view.View$PerformClick.run(View.java:27804)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7073)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)

MainActivity.java

package com.example.fixmyphysics;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.FileProvider;

import android.Manifest;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import static android.os.Environment.getExternalStoragePublicDirectory;

public class MainActivity extends AppCompatActivity {

    Button picture_btn;
    ImageView display;
    String pathToFile;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        picture_btn = findViewById(R.id.capture_image);
        if (Build.VERSION.SDK_INT >=23){
            requestPermissions(new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 2);
        }
        picture_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dispatchPictureTakerAction();
            }
          });
        display = findViewById(R.id.imageView4);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1 && resultCode == RESULT_OK) {
            Bitmap imageBitmap = BitmapFactory.decodeFile(pathToFile);
            display.setImageBitmap(imageBitmap);
        }
    }

    private void dispatchPictureTakerAction(){
        Intent takePic = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePic.resolveActivity(getPackageManager()) !=null){
            File photoFile = null;
            photoFile = createImageFile();

            if (photoFile != null){
                pathToFile = photoFile.getAbsolutePath();
                Uri photoURI = FileProvider.getUriForFile(MainActivity.this, "com.fixmyphysics.FileProvider", photoFile);
                takePic.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
                startActivityForResult(takePic, 1);
            }
        }
    }


    private File createImageFile() {
        String name = new SimpleDateFormat("yyyyMMdd__HHmmss").format(new Date());
        File storageDir = getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
        File image = null;
        try {
            image = File.createTempFile(name,".jpg", storageDir);
        } catch (IOException e){
            Log.d("mylog", "Excep : " + e.toString());
        }
        return image;
    }


}

AndroidMainifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.fixmyphysics">
    <uses-feature android:name="android.hardware.camera" android:required="true" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name= ".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="${applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths">
            </meta-data>
        </provider>

    </application>

</manifest>

答案1

得分: 0

尝试这个。

<uses-permission
 android:name="android.permission.WRITE_EXTERNAL_STORAGE"
 android:maxSdkVersion="18" />`输入代码在这里`
英文:

Try this one.

<uses-permission
 android:name="android.permission.WRITE_EXTERNAL_STORAGE"
 android:maxSdkVersion="18" />`enter code here`

huangapple
  • 本文由 发表于 2020年7月25日 06:25:08
  • 转载请务必保留本文链接:https://java.coder-hub.com/63082214.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定