Fixed take picture option for old Android versions,

Changed "external-path" entry in paths.xml
This commit is contained in:
Olga Miller 2017-01-07 14:54:32 +01:00
parent 38423f76b9
commit 82710aa7e2
3 changed files with 23 additions and 15 deletions

View file

@ -32,7 +32,6 @@ import android.provider.MediaStore;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat; import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat; import android.support.v4.content.ContextCompat;
import android.support.v4.content.FileProvider;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.system.ErrnoException; import android.system.ErrnoException;
import android.system.OsConstants; import android.system.OsConstants;
@ -58,7 +57,6 @@ public class MainActivity extends AppCompatActivity {
private TextOverlayTemplate mTextOverlayTemplate; private TextOverlayTemplate mTextOverlayTemplate;
private CropView mCropView; private CropView mCropView;
private Encoder mEncoder; private Encoder mEncoder;
private File mFile;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -331,9 +329,10 @@ public class MainActivity extends AppCompatActivity {
dispatchTakePictureIntent(); dispatchTakePictureIntent();
} }
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private boolean hasCamera() { private boolean hasCamera() {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN)
return getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY); return getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY);
return getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA);
} }
public void startEditTextActivity(@NonNull Label label) { public void startEditTextActivity(@NonNull Label label) {
@ -345,9 +344,9 @@ public class MainActivity extends AppCompatActivity {
private void dispatchTakePictureIntent() { private void dispatchTakePictureIntent() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(getPackageManager()) != null) { if (intent.resolveActivity(getPackageManager()) != null) {
mFile = Utility.createImageFilePath(); Uri uri = Utility.createImageUri(this);
if (mFile != null) { if (uri != null) {
Uri uri = FileProvider.getUriForFile(this, "om.sstvencoder", mFile); mSettings.setImageUri(uri);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
} }
@ -371,7 +370,7 @@ public class MainActivity extends AppCompatActivity {
break; break;
case REQUEST_IMAGE_CAPTURE: case REQUEST_IMAGE_CAPTURE:
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
Uri uri = Uri.fromFile(mFile); Uri uri = mSettings.getImageUri();
if (loadImage(uri, true)) if (loadImage(uri, true))
addImageToGallery(uri); addImageToGallery(uri);
} }

View file

@ -16,12 +16,16 @@ limitations under the License.
package om.sstvencoder; package om.sstvencoder;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.Rect; import android.graphics.Rect;
import android.media.ExifInterface; import android.media.ExifInterface;
import android.net.Uri;
import android.os.Build;
import android.os.Environment; import android.os.Environment;
import android.provider.MediaStore; import android.provider.MediaStore;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v4.content.FileProvider;
import java.io.File; import java.io.File;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
@ -87,18 +91,23 @@ public final class Utility {
return values; return values;
} }
static File createImageFilePath() { static Uri createImageUri(Context context) {
File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
if (!isExternalStorageWritable()) if (!isExternalStorageWritable())
return null; return null;
return new File(dir, createFileName() + ".jpg"); File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File file = new File(dir, createFileName() + ".jpg");
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N)
// API level 24 and higher: FileUriExposedException
return Uri.fromFile(file); // file:// URI
// API level 15: Camera crash
return FileProvider.getUriForFile(context, "om.sstvencoder", file); // content:// URI
} }
static File createWaveFilePath() { static File createWaveFilePath() {
// sdcard/Music
File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
if (!isExternalStorageWritable()) if (!isExternalStorageWritable())
return null; return null;
File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
return new File(dir, createFileName() + ".wav"); return new File(dir, createFileName() + ".wav");
} }

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android"> <paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path <external-path
name="pictures" name="media"
path=""/> path="."/>
</paths> </paths>