相机应用程序在android marshmallow中关闭

时间:2016-05-05 06:42:26

标签: android camera android-6.0-marshmallow

我创建了一个应用程序,用户可以使用他们的默认相机拍摄照片。它在旧版本中工作正常,直到棒棒糖,但当我尝试在marshmallow中运行应用程序时,应用程序将关闭。  所以我添加了一些代码来为用户提供相机应用程序的许可,但即使它不起作用。

query.setQuery("id:"+docID);

我用条件检查手机版本。如果它是棉花糖,那么我给了一个方法名称showcamera来做棉花糖的功能

ShowCamera:

public class Cam extends Activity{
String receivingdata;
TextView namecat;
String amount,vat;
private static final String TAG = Cam.class.getSimpleName();
ImageButton imgview,imgchart,imgexit;
Boolean isInternetPresent = false;
ConnectionDetector cd;
AlertDialog alert;
ImageButton btgoback,btcaptureagain,btnpreview;
static TextView tv;
private ImageView imgPreview;
private ProgressDialog pDialog;
public static final int progress_bar_type = 0;
public static Bitmap bitmap;
final Context context=this;
ConnectionClass connectionClass;
private static final String IMAGE_CAPTURE_FOLDER = "Receipt";
private static final int CAMERA_PIC_REQUEST = 1111;
private static File file;
private Uri ImagefileUri;
private static final String PREF_FIRSTLAUNCH_HELP = "helpcmaera";
private boolean helpDisplayed = false;

private static final String LOGIN_URL = "http://balajee2777-001-site1.1tempurl.com/backup-07032016/Receiptphp/receipts.php";
@Override
public void onBackPressed() {
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
            context);


    alertDialogBuilder.setTitle("Receipt");


    alertDialogBuilder
            .setMessage("Would you Like to go previous Page!")
            .setCancelable(false)
            .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                    Intent i=new Intent(Cam.this,ListAct.class);
                    startActivity(i);
                    Cam.this.finish();
                }
            })
            .setNegativeButton("No",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                    dialog.cancel();
                }
            });

           AlertDialog alertDialog = alertDialogBuilder.create();


    alertDialog.show();
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.camcod);
    cd = new ConnectionDetector(getApplicationContext());
    isInternetPresent = cd.isConnectingToInternet();
    Bundle b = getIntent().getExtras();
    receivingdata = b.getString("key");
    tv = (TextView)findViewById(R.id.camcodname);
    tv.setText(receivingdata);
    tv.setVisibility(View.INVISIBLE);
    String[] bits=receivingdata.split("_");
    String catname = bits[0];
    String vatname= bits[1];
    connectionClass= new ConnectionClass();
    imgPreview = (ImageView) findViewById(R.id.imgpreview);
    namecat=(TextView)findViewById(R.id.tvcatnamess);
    namecat.setText(catname);
    imgview=(ImageButton)findViewById(R.id.camlinearrecep);
    imgchart=(ImageButton)findViewById(R.id.camlinearchart);
    imgexit=(ImageButton)findViewById(R.id.camlinearexit);
    btgoback=(ImageButton)findViewById(R.id.bgoback);
    btnpreview=(ImageButton)findViewById(R.id.btnpreview);
    btcaptureagain=(ImageButton)findViewById(R.id.bcaptureagain);
    if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
        showcamera();
    }else {
        Intent intent = new Intent(
                android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        ImagefileUri = Uri.fromFile(getFile());

        intent.putExtra(MediaStore.EXTRA_OUTPUT, ImagefileUri);
        startActivityForResult(intent, CAMERA_PIC_REQUEST);
    }
    showHelpForFirstLaunch();
    btgoback.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(isInternetPresent) {
                showreceipt();
            }else{
                neti();
            }

        }
    });
    btnpreview.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i=new Intent(Cam.this,DeleteMainAct.class);
            startActivity(i);

        }
    });
    btcaptureagain.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
              showcamera();
          }else {
              Intent intent = new Intent(
                      android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
              ImagefileUri = Uri.fromFile(getFile());

              intent.putExtra(MediaStore.EXTRA_OUTPUT, ImagefileUri);
              startActivityForResult(intent, CAMERA_PIC_REQUEST);
          }
        }
    });

    imgview.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                    context);

            // set title
            alertDialogBuilder.setTitle("Receipt");

            // set dialog message
            alertDialogBuilder
                    .setMessage("Would you Like to view receipts!")
                    .setCancelable(false)
                    .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {
                            // if this button is clicked, close
                            // current activity
                            Intent i =new Intent(Cam.this,Viewreceipt.class);
                            startActivity(i);
                            Cam.this.finish();
                        }
                    })
                    .setNegativeButton("No",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {
                            // if this button is clicked, just close
                            // the dialog box and do nothing
                            dialog.cancel();
                        }
                    });

            // create alert dialog
            AlertDialog alertDialog = alertDialogBuilder.create();

            // show it
            alertDialog.show();


        }
    });
    imgchart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                    context);

            // set title
            alertDialogBuilder.setTitle("Receipt");

            // set dialog message
            alertDialogBuilder
                    .setMessage("Would you Like to see report!")
                    .setCancelable(false)
                    .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {
                            // if this button is clicked, close
                            // current activity
                            Intent i =new Intent(Cam.this,Chartboy.class);
                            startActivity(i);
                            Cam.this.finish();
                        }
                    })
                    .setNegativeButton("No",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {
                            // if this button is clicked, just close
                            // the dialog box and do nothing
                            dialog.cancel();
                        }
                    });

            // create alert dialog
            AlertDialog alertDialog = alertDialogBuilder.create();

            // show it
            alertDialog.show();


        }
    });
    imgexit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                    context);

            // set title
            alertDialogBuilder.setTitle("Receipt");

            // set dialog message
            alertDialogBuilder
                    .setMessage("Would you Like to exit!")
                    .setCancelable(false)
                    .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {
                            // if this button is clicked, close
                            // current activity
                            Intent startMain = new Intent(Intent.ACTION_MAIN);
                            startMain.addCategory(Intent.CATEGORY_HOME);
                            startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            startActivity(startMain);

                        }
                    })
                    .setNegativeButton("No",new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,int id) {
                            // if this button is clicked, just close
                            // the dialog box and do nothing
                            dialog.cancel();
                        }
                    });

            // create alert dialog
            AlertDialog alertDialog = alertDialogBuilder.create();

            // show it
            alertDialog.show();

        }
    });
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if(requestCode==CAMERA_PIC_REQUEST){
        if(grantResults[0]==PackageManager.PERMISSION_GRANTED){
            Intent intent = new Intent(
                    android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            ImagefileUri = Uri.fromFile(getFile());

            intent.putExtra(MediaStore.EXTRA_OUTPUT, ImagefileUri);
            startActivityForResult(intent, CAMERA_PIC_REQUEST);
        }else{
            Toast.makeText(this,"Camera permission not granted",Toast.LENGTH_SHORT).show();
        }
    }else{
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

}

private void showcamera() {
    if(checkSelfPermission(android.Manifest.permission.CAMERA)== PackageManager.PERMISSION_GRANTED){
        Intent intent = new Intent(
                android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        ImagefileUri = Uri.fromFile(getFile());

        intent.putExtra(MediaStore.EXTRA_OUTPUT, ImagefileUri);
        startActivityForResult(intent, CAMERA_PIC_REQUEST);
    }else{
        if(shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)){
            Toast.makeText(this,"Camera permission is needed to show the preview",Toast.LENGTH_SHORT).show();
        }
        requestPermissions(new String[]{Manifest.permission.CAMERA}, CAMERA_PIC_REQUEST);
    }
}

private void showHelpForFirstLaunch() {
    helpDisplayed = getPreferenceValue(PREF_FIRSTLAUNCH_HELP, false);
    if (!helpDisplayed) {
        showHelp();
        savePreference(PREF_FIRSTLAUNCH_HELP, true);
    }else if(helpDisplayed){
        return;
    }
}
private void showHelp() {
    final View instructionsContainer = findViewById(R.id.container_help);
    instructionsContainer.setVisibility(View.VISIBLE);
    instructionsContainer.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            instructionsContainer.setVisibility(View.INVISIBLE);
        }
    });
}

private boolean getPreferenceValue(String key, boolean defaultValue) {
    SharedPreferences preferences = getPreferences(MODE_PRIVATE);
    return preferences.getBoolean(key, defaultValue);
}

private void savePreference(String key, boolean value) {
    SharedPreferences preferences = getPreferences(MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putBoolean(key, value);
    editor.commit();
}

private File getFile() {
    String filepath = Environment.getExternalStorageDirectory().getPath();
    file = new File(filepath, IMAGE_CAPTURE_FOLDER);
    if (!file.exists()) {
        file.mkdirs();
    }
    String names=tv.getText().toString();
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());


    return new File(file + File.separator + names+"_"+timeStamp
            + ".jpg");
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (requestCode == CAMERA_PIC_REQUEST) {
            imgPreview.setVisibility(View.VISIBLE);

            Display display = getWindowManager().getDefaultDisplay();
            Point size = new Point();
            display.getSize(size);
            int dw = size.x;
            int dh = size.y;
            // Load up the image's dimensions not the image itself
            BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
            bmpFactoryOptions.inJustDecodeBounds = true;
            Bitmap bmp = BitmapFactory.decodeFile(ImagefileUri.getPath(),
                    bmpFactoryOptions);
            int heightRatio = (int) Math.ceil(bmpFactoryOptions.outHeight
                    / (float) dh);
            int widthRatio = (int) Math.ceil(bmpFactoryOptions.outWidth
                    / (float) dw);
            Log.v("HEIGHTRATIO", "" + heightRatio);
            Log.v("WIDTHRATIO", "" + widthRatio);
            if (heightRatio > 1 && widthRatio > 1) {
                if (heightRatio > widthRatio) {
                    // Height ratio is larger, scale according to it
                    bmpFactoryOptions.inSampleSize = heightRatio;
                } else {
                    // Width ratio is larger, scale according to it
                    bmpFactoryOptions.inSampleSize = widthRatio;
                }
            }
            // Decode it for real
            bmpFactoryOptions.inJustDecodeBounds = false;
            bmp = BitmapFactory.decodeFile(ImagefileUri.getPath(),
                    bmpFactoryOptions);
            imgPreview.setImageBitmap(bmp);
        }
    } else if (resultCode == RESULT_CANCELED) {
        // user cancelled Image capture
        Toast.makeText(getApplicationContext(),
                "User cancelled image capture", Toast.LENGTH_SHORT).show();
    } else {
        // failed to capture image
        Toast.makeText(getApplicationContext(),
                "Sorry! Failed to capture image", Toast.LENGTH_SHORT)
                .show();
    }
}

private void neti() {
    final LayoutInflater layoutInflater = LayoutInflater.from(Cam.this);
    final View promptView = layoutInflater.inflate(R.layout.connectionlost, null);
    final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(Cam.this);
    alertDialogBuilder.setView(promptView);
    alertDialogBuilder.setCancelable(false);
    final Button retry=(Button)promptView.findViewById(R.id.btnretry);
    retry.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent=getIntent();
            finish();
            startActivity(intent);
        }
    });
    alert= alertDialogBuilder.create();
    alert.show();
}
private void showreceipt() {
    LayoutInflater repcard=LayoutInflater.from(Cam.this);
    View promptView=repcard.inflate(R.layout.moneyreceipt,null);
    AlertDialog.Builder alertDialogBuilder=new AlertDialog.Builder(Cam.this);
    alertDialogBuilder.setCancelable(false);
    alertDialogBuilder.setView(promptView);
   final EditText amt=(EditText)promptView.findViewById(R.id.edamt);
   final EditText vta=(EditText)promptView.findViewById(R.id.edvat);
   final TextView  tvs=(TextView)promptView.findViewById(R.id.tvamount);
   final TextView tvat=(TextView)promptView.findViewById(R.id.tvvat);
    tvs.setVisibility(View.INVISIBLE);
    tvat.setVisibility(View.INVISIBLE);
    amt.setRawInputType(Configuration.KEYBOARD_12KEY);
    vta.setRawInputType(Configuration.KEYBOARD_12KEY);

    final Button save=(Button)promptView.findViewById(R.id.btnmoneysave);
    save.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            tvs.setText(amt.getText().toString());
            tvat.setText(vta.getText().toString());
            amount=tvs.getText().toString();
            vat=tvat.getText().toString();

           // Toast.makeText(Cam.this, amount, Toast.LENGTH_LONG).show();
            //Toast.makeText(Cam.this, vat, Toast.LENGTH_LONG).show();

            detailsreceiptupload();

        }
    });
    AlertDialog alert = alertDialogBuilder.create();
    alert.show();
}

private void detailsreceiptupload() {
    String[] bits=receivingdata.split("_");
    String catname = bits[0];
    String cdte=bits[1];
    String[] nyte=cdte.split("#");
    String email=nyte[0];
    String cdate=nyte[1];
    String cimagetag=tv.getText().toString();
    //String amt=tvs.getText().toString();
    userLogin(catname, cdate,email,cimagetag,amount,vat);
}

private void userLogin(String catname, String cdate, String email, String cimagetag, String amount, String vat) {
    class UserLoginClass extends AsyncTask<String,Void,String> {
        ProgressDialog loading;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            loading = ProgressDialog.show(Cam.this, "Connecting to Cloud", null, true, true);
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            loading.dismiss();

            if(s.equalsIgnoreCase("success")) {
                DoLogin dologin=new DoLogin();
                dologin.execute("");

            }
            else
            {
                Toast.makeText(Cam.this,s,Toast.LENGTH_LONG).show();
            }
        }

        @Override
        protected String doInBackground(String... params) {
            HashMap<String,String> data = new HashMap<>();
            data.put("catname",params[0]);
            data.put("cdate",params[1]);
            data.put("email",params[2]);
            data.put("cimagetag",params[3]);
            data.put("amount",params[4]);
            data.put("vat",params[5]);
            RegisterUserClass ruc = new RegisterUserClass();
            String result = ruc.sendPostRequest(LOGIN_URL,data);
            return result;
        }
    }
    UserLoginClass ulc = new UserLoginClass();
    ulc.execute(catname,cdate,email,cimagetag,amount,vat);
}



@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
        case progress_bar_type:
            pDialog = new ProgressDialog(this);
            pDialog.setMessage("Processing...");
            pDialog.setIndeterminate(true);
            pDialog.setMax(100);
            pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            pDialog.setProgressNumberFormat(null);
            pDialog.setProgressPercentFormat(null);
            pDialog.setCancelable(false);
            pDialog.show();
            return pDialog;
        default:
            return null;
    }
}
class DoLogin extends AsyncTask<String,String,String> {
    String z="";
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        showDialog(progress_bar_type);
    }

    @Override
    protected String doInBackground(String... params) {
        String ExternalStorageDirectoryPath = Environment
                .getExternalStorageDirectory()
                .getAbsolutePath();
        String targetPath = ExternalStorageDirectoryPath + "/Receipt";
        File targetDirector = new File(targetPath);
        File[] files = targetDirector.listFiles();
        File destinationdir = new File(Environment.getExternalStorageDirectory() ,"/CompressedImage");
        if (!destinationdir.exists()) {
            destinationdir.mkdirs();
        }
        for(File file1:files){
            FileOutputStream fos=null;
            try{
                File file=new File(destinationdir,file1.getName());
                fos=new FileOutputStream(file);
                Bitmap bm = BitmapFactory.decodeFile(file1.getAbsolutePath());
                bm.compress(Bitmap.CompressFormat.JPEG, 25, fos);
                fos.flush();
                fos.close();
                MediaStore.Images.Media.insertImage(getContentResolver(), destinationdir.getPath(), file.getName(), file.getName());
            } catch (FileNotFoundException e) {
                e.printStackTrace();

            } catch (IOException e) {
                e.printStackTrace();

            }
            }
        return z;
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        String ExternalStorageDirectoryPath = Environment
                .getExternalStorageDirectory()
                .getAbsolutePath();

        String targetPath = ExternalStorageDirectoryPath + "/Receipt";


        File targetDirector = new File(targetPath);

        File[] files = targetDirector.listFiles();
        for (File file : files) {
            file.delete();
        }

        Intent i=new Intent(Cam.this,ReceiptGrid.class);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(i);
        Cam.this.finish();
        dismissDialog(progress_bar_type);
    }
    protected void onProgressUpdate(String... progress) {

        pDialog.setProgress(Integer.parseInt(progress[0]));
    }
}}

0 个答案:

没有答案