Grundsätzlich versuche ich eine einfache App zu erstellen, die die Standardkamera-App verwendet, um ein Bild aufzunehmen, und dann dieses Bild in einer neuen Aktivität in einem ImageView anzeigenDas Ergebnis der Kameraaktivität in ImageView kann nicht angezeigt werden.
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
und ich bin auch manuell anfordernden: ich, aber alles versucht haben, hat sich in
java.io.FileNotFoundException: /storage/emulated/0/imageToProcess.jpg: open failed: ENOENT (No such file or directory)
ich habe die richtigen Berechtigungen (vielleicht sogar zu viele) im Manifest enthalten resultierten Berechtigungen wenn nötig in t er Haupttätigkeit:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if(checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.CAMERA}, 1);
}
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
if(checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
}
so glaube ich nicht, dass das Problem mit Lese-/Schreibberechtigungen ist.
In meiner Haupt-XML-Datei Aktivität, ich habe eine Schaltfläche mit einem onClick Hörer erstellt, das die folgenden Methode aufruft:
public void openCamera(View view) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File f = new File(Environment.getExternalStorageDirectory() + File.separator + "imageToProcess.jpg");
imgUri = Uri.fromFile(f);
intent.putExtra("imgUri", imgUri.toString());
startActivityForResult(intent, TAKE_PICTURE);
}
Hier ist die onActivityResult() -Methode ich eine neue Absicht zu schaffen definiert und übergibt die uri auf die neue Tätigkeit:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if(requestCode == TAKE_PICTURE && resultCode == Activity.RESULT_OK) {
Intent camResult = new Intent(this, ShowCameraResult.class);
camResult.putExtra("imgUri", imgUri.toString());
startActivity(camResult);
}
}
HINWEIS: imgUri und TAKE_PICTURE sind an der Spitze der Klasse definiert als protected static final int TAKE_PICTURE = 1;
und private Uri imgUri;
Schließlich ist hier meine ShowCameraResult Aktivität
public class ShowCameraResult extends AppCompatActivity {
private Bitmap mImageBitmap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_camera_result);
ImageView imageView = (ImageView)findViewById(R.id.imageView);
String filePath = getIntent().getStringExtra("imgUri");
Log.d("ShowCameraResult", "directory: " + filePath);
try {
mImageBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse(filePath));
imageView.setImageBitmap(mImageBitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Der Log.d Methodenaufruf oben zurück
ShowCameraResult: directory: file:///storage/emulated/0/imageToProcess.jpg
Dies führt mich zu glauben, dass das Bilder von der Kamera nicht tatsächlich in gespeichert wird meine imageToProcess.jpg Datei, aber ich könnte sehr falsch liegen, da dies das erste echte Android-Projekt ist, an dem ich gearbeitet habe.
Also meine Frage ist: Wo bin ich falsch gelaufen?
Jede Hilfe wird sehr geschätzt, danke!
Test es auf dem Gerät nicht auf Emulator –
@Dhara Ich teste auf einem Galaxy S5 – Austin
sein ein Fehler in Samsung-Test auf andere Gerät –