日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 无法显示SD卡目录,Android studio无法在SD卡上创建新目录?

發布時間:2025/3/19 Android 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 无法显示SD卡目录,Android studio无法在SD卡上创建新目录? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我使用名為scanlibrary的庫來掃描照片,然后將它傳遞給tess-two來執行OCR過程。問題是,在目錄“ScanDemoExample”不被創建因此tessdata文件不會被復制,當我跑我的活動我得到的錯誤:Android studio無法在SD卡上創建新目錄?

E/Tesseract(native): Could not initialize Tesseract API with language=eng!

因為正方體找不到在data_path文件。 代碼工作時,我使用現有的目錄,而不是以下:

public static final String DATA_PATH = Environment

.getExternalStorageDirectory() +"/ScanDemoExample/";

這是我的主要活動:

package com.scanner.demo;

import android.app.Activity;

import android.content.Intent;

import android.content.res.AssetManager;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.net.Uri;

import android.os.Bundle;

import android.os.Environment;

import android.provider.MediaStore;

import android.support.v7.app.ActionBarActivity;

import android.util.Log;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.Button;

import android.widget.ImageView;

import com.googlecode.tesseract.android.TessBaseAPI;

import com.scanlibrary.ScanActivity;

import com.scanlibrary.ScanConstants;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

public class MainActivity extends ActionBarActivity {

public static final String PACKAGE_NAME = "com.scanner.demo";

public static final String DATA_PATH = Environment

.getExternalStorageDirectory() +"/ScanDemoExample/";

// You should have the trained data file in assets folder

// You can get them at:

// http://code.google.com/p/tesseract-ocr/downloads/list

public static final String lang = "eng";

private static final String TAG = "MainActivity.java";

// public static final String _path = DATA_PATH + "/ocr.jpg";

private static final int REQUEST_CODE = 99;

private Button scanButton;

private Button cameraButton;

private Button mediaButton;

private ImageView scannedImageView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

String[] paths = new String[] { DATA_PATH, DATA_PATH + "tessdata/" };

for (String path : paths) {

File dir = new File(path);

if (!dir.exists()) {

if (!dir.mkdirs()) {

Log.e(TAG, "ERROR: Creation of directory " + path + " on sdcard failed");

return;

} else {

Log.v(TAG, "Created directory " + path + " on sdcard");

}

}

}

// lang.traineddata file with the app (in assets folder)

// You can get them at:

// http://code.google.com/p/tesseract-ocr/downloads/list

// This area needs work and optimization

if (!(new File(DATA_PATH + "tessdata/" + lang + ".traineddata")).exists()) {

try {

AssetManager assetManager = getAssets();

InputStream in = assetManager.open("tessdata/" + lang + ".traineddata");

//GZIPInputStream gin = new GZIPInputStream(in);

OutputStream out = new FileOutputStream(DATA_PATH

+ "tessdata/" + lang + ".traineddata");

// Transfer bytes from in to out

byte[] buf = new byte[1024];

int len;

//while ((lenf = gin.read(buff)) > 0) {

while ((len = in.read(buf)) > 0) {

out.write(buf, 0, len);

}

in.close();

//gin.close();

out.close();

Log.v(TAG, "Copied " + lang + " traineddata");

} catch (IOException e) {

Log.e(TAG, "Was unable to copy " + lang + " traineddata " + e.toString());

}

}

init();

}

private void init() {

scanButton = (Button) findViewById(R.id.scanButton);

scanButton.setOnClickListener(new ScanButtonClickListener());

cameraButton = (Button) findViewById(R.id.cameraButton);

cameraButton.setOnClickListener(new ScanButtonClickListener(ScanConstants.OPEN_CAMERA));

mediaButton = (Button) findViewById(R.id.mediaButton);

mediaButton.setOnClickListener(new ScanButtonClickListener(ScanConstants.OPEN_MEDIA));

scannedImageView = (ImageView) findViewById(R.id.scannedImage);

}

private class ScanButtonClickListener implements View.OnClickListener {

private int preference;

public ScanButtonClickListener(int preference) {

this.preference = preference;

}

public ScanButtonClickListener() {

}

@Override

public void onClick(View v) {

startScan(preference);

}

}

protected void startScan(int preference) {

Intent intent = new Intent(this, ScanActivity.class);

intent.putExtra(ScanConstants.OPEN_INTENT_PREFERENCE, preference);

startActivityForResult(intent, REQUEST_CODE);

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) {

Uri uri = data.getExtras().getParcelable(ScanConstants.SCANNED_RESULT);

Bitmap bitmap = null;

try {

bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);

getContentResolver().delete(uri, null, null);

scannedImageView.setImageBitmap(bitmap);

///

Log.v(TAG, "Before baseApi");

Log.v(TAG, "ExternalStorageDirectory: "+Environment

.getExternalStorageDirectory().toString());

Log.v(TAG, "DATA_PATH: "+DATA_PATH);

TessBaseAPI baseApi = new TessBaseAPI();

baseApi.setDebug(true);

baseApi.init(DATA_PATH, lang);

bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);

baseApi.setImage(bitmap);

String recognizedText = baseApi.getUTF8Text();

baseApi.end();

// You now have the text in recognizedText var, you can do anything with it.

// We will display a stripped out trimmed alpha-numeric version of it (if lang is eng)

// so that garbage doesn't make it to the display.

Log.v(TAG, "OCRED TEXT: " + recognizedText);

if (lang.equalsIgnoreCase("eng")) {

recognizedText = recognizedText.replaceAll("[^a-zA-Z0-9]+", " ");

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

private Bitmap convertByteArrayToBitmap(byte[] data) {

return BitmapFactory.decodeByteArray(data, 0, data.length);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.menu_main, menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

// Handle action bar item clicks here. The action bar will

// automatically handle clicks on the Home/Up button, so long

// as you specify a parent activity in AndroidManifest.xml.

int id = item.getItemId();

//noinspection SimplifiableIfStatement

if (id == R.id.action_settings) {

return true;

}

return super.onOptionsItemSelected(item);

}

}

編輯: ,這里是我的logcat

I/art: Explicit concurrent mark sweep GC freed 2044(210KB) AllocSpace objects, 6(395KB) LOS objects, 40% free, 3MB/6MB, paused 242us total 9.669ms

V/MainActivity.java: Before baseApi

V/MainActivity.java: ExternalStorageDirectory: /storage/emulated/0

V/MainActivity.java: DATA_PATH: /storage/emulated/0/ScanDemoExample/

W/linker: libjpgt.so: unused DT entry: type 0x6ffffffe arg 0x2114

W/linker: libjpgt.so: unused DT entry: type 0x6fffffff arg 0x1

W/linker: libpngt.so: unused DT entry: type 0x6ffffffe arg 0x4a04

W/linker: libpngt.so: unused DT entry: type 0x6fffffff arg 0x2

W/linker: liblept.so: unused DT entry: type 0x6ffffffe arg 0x1dc90

W/linker: liblept.so: unused DT entry: type 0x6fffffff arg 0x2

W/linker: libtess.so: unused DT entry: type 0x6ffffffe arg 0x5d2e8

W/linker: libtess.so: unused DT entry: type 0x6fffffff arg 0x3

E/Tesseract(native): Could not initialize Tesseract API with language=eng!

A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x8 in tid 2863 (om.scanner.demo)

Application terminated.

+1

你要求清單中的相應權限,并沒有你[要求運行時權限(https://stackoverflow.com/questions/32635704/android -permission-犯規工作偶數如果-I-已經宣布的,它)? –

+2

logcat顯示出什么錯誤的提示? “DATA_PATH”的實際值是多少?錯誤信息看起來像來自Tesseract;你的任何代碼的邏輯報告了一個問題?文件是否按照預期書寫(即,它們是你期望它們的位置,而Tesseract沒有找到它們,或者它們只是不在那里)? –

+0

我使用genymotion模擬器,如果這改變了一些東西,我已經發布我的logcat。我認為應該創建該目錄的部分根本不被執行,因為我既沒有收到一個錯誤,表示它不能創建,也沒有創建的確認,我甚至檢查過它是否實際上創建了該設備,它不是。 –

總結

以上是生活随笔為你收集整理的android 无法显示SD卡目录,Android studio无法在SD卡上创建新目录?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。