2017-10-28 3 views
1

Ich habe gerade versucht, einen Code zu schreiben, um ein Bild zu erfassen und das Bild im Standardverzeichnis mit dem Namen test.jpg zu speichern. Mein Gerät zu tun, das Bild einzufangen, aber es läuft die sonst Teil des Testfall und zeigt Fehler erfassen image.In XML-Datei gibt es nur eine Taste und Android: onClick wirdWarum funktioniert dieser Code zum Aufnehmen von Bildern von einem Gerät nicht richtig?

public class MainActivity erweitert Aktivität verarbeiten {

private File imagefile; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 
public void process(View v) 
{ 
    Toast.makeText(this,"Inside the process",Toast.LENGTH_SHORT).show(); 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    imagefile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"test.jpg"); 
    Uri temp = Uri.fromFile(imagefile); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT,temp); 
    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,1); 
    startActivityForResult(intent,0); 


} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode==0) 
    { 
     switch (resultCode){ 
      case Activity.RESULT_OK: 
       if(imagefile.exists()) 
       { 
        Toast.makeText(this,"File was saved at "+imagefile.getAbsolutePath(),Toast.LENGTH_SHORT).show(); 
       } 
       else 
       { 
        Toast.makeText(this,"Error captureing image",Toast.LENGTH_SHORT).show(); 
       } 
       break; 
      case Activity.RESULT_CANCELED: 
       break; 
     } 
    } 
} 
} 
+0

Cast Ihre Schaltfläche in onCreate() -Methode –

+0

@Yashajabiya ich tat, aber immer noch die gleiche –

+0

Add '' und Anfrage Kamera Erlaubnis . – KeLiuyue

Antwort

0

1.Verwenden checkSelfPermission

2.Use requestPermissions

3.Use onRequestPermissionsResult

  • Wenn die Erlaubnis erteilt wird, können Sie tun etwas, das Sie wollen, sollten Sie sonst noch requestPermissions in Ihrem Code tun.

  • Wenn Sie Berechtigungen anfordern, können Sie mit Ergebnis in onRequestPermissionsResult Methode behandeln .Und wenn Berechtigungen erteilen, können Sie verweigerte etwas, was Sie wollen, sonst handelt von dieser Erlaubnis tun.

Versuchen Sie dies.

public static final int MY_PERMISSIONS_REQUEST_CAMERA = 0; 

// process in your code 
public void process(View view) { 
    if (ContextCompat.checkSelfPermission(this, 
      Manifest.permission.CAMERA) 
      != PackageManager.PERMISSION_GRANTED) { 
     ActivityCompat.requestPermissions(this, 
       new String[]{Manifest.permission.CAMERA}, 
       MY_PERMISSIONS_REQUEST_CAMERA); 
    } else { 
     // permission_granted 
     callMethod(); 
    } 
} 

/** 
* do something you want 
*/ 
public void callMethod() { 
    Toast.makeText(this, "Inside the process", Toast.LENGTH_SHORT).show(); 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    imagefile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "test.jpg"); 
    Uri temp = Uri.fromFile(imagefile); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, temp); 
    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 
    startActivityForResult(intent, 0); 
} 

/** 
* onRequestPermissionsResult 
* 
* @param requestCode 
* @param permissions 
* @param grantResults 
*/ 
@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    if (requestCode == MY_PERMISSIONS_REQUEST_CALL_PHONE) { 
     if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      // Permission granted 
      callMethod(); 
     } else { 
      // Permission Denied 
      Toast.makeText(MainActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show(); 
     } 
     return; 
    } 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
} 
+0

Dank es funktioniert –

+0

Viel Glück für Sie. @ Adnan_aust – KeLiuyue

Verwandte Themen