簡體   English   中英

android-錯誤:權限被拒絕

[英]android - Error: PERMISSION DENIED FOR THE ATTACHMENT

我正在嘗試在Gmail上附加pdf文件。 但是問題是,它總是顯示一個吐司消息,上面寫着“權限被拒絕”。 我嘗試過使用Yahoo等其他電子郵件,但該文件仍未附加。

這是我的附件代碼:

case R.id.emailPdf:
                try {
                    String filename = "SampleFile1.pdf";
                    File filelocation = new File(Environment.getDataDirectory() + "/data/" + getPackageName() + "/files/", filename);
                    filelocation.setReadable(true, false);
                    Uri path = Uri.fromFile(filelocation);
                    Intent emailIntent = new Intent(Intent.ACTION_SEND);
                    emailIntent.setType("vnd.android.cursor.dir/email");
                    String to[] = {""};
                    emailIntent.putExtra(Intent.EXTRA_EMAIL, to);

                    emailIntent.putExtra(Intent.EXTRA_STREAM, path);

                    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
                    emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                    startActivityForResult(Intent.createChooser(emailIntent, "Send email..."), 12);
                    break;

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

這些是AndroidManifest.xml文件中的權限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

我使用了調試器,但觀察到正在從文件位置讀取文件,但不知道為什么未附加文件。

任何幫助,將不勝感激。

提前致謝。

嘗試如下:

創建方法以檢查運行時權限。

 @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public boolean checkExternalPermission() {
    int currentAPIVersion = Build.VERSION.SDK_INT;
    if (currentAPIVersion >= android.os.Build.VERSION_CODES.M) {
        if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                AlertDialog.Builder alertBuilder = new AlertDialog.Builder(getActivity());
                alertBuilder.setCancelable(true);
                alertBuilder.setTitle("Permission necessary");
                alertBuilder.setMessage("Write external storage permission is necessary to read gallery pictures!!!");
                alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
                    public void onClick(DialogInterface dialog, int which) {
                        ActivityCompat.requestPermissions((Activity) getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
                    }
                });
                AlertDialog alert = alertBuilder.create();
                alert.show();
            } else {
                ActivityCompat.requestPermissions((Activity) getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
            }
            return false;
        } else {
            return true;
        }
    } else {
        return true;
    }
}

現在,在附加按鈕上單擊:

   boolean result = checkExternalPermission();
            if (result) {
                activeGallery();
            }

創建打開畫廊的方法,如下所示:

 /**
 * to gallery
 */
private void activeGallery() {
    Intent intent = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(intent, RESULT_LOAD_IMAGE);
}

現在處理如下所示的許可結果:

  @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE:

            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
                activeGallery();
            } else {
                Toast.makeText(getActivity(), "Permission not granted", Toast.LENGTH_LONG).show();
//code for deny


        }
            break;

    }
}

現在為選定的附件處理以下活動結果:

    @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
        case RESULT_LOAD_IMAGE:
            if (resultCode == RESULT_OK && null != data) {

                try {
                    Uri selectedImage = data.getData();
                    String[] filePathColumn = {MediaStore.Images.Media.DATA};
                    Cursor cursor = getActivity().getContentResolver()
                            .query(selectedImage, filePathColumn, null, null,
                                    null);
                    cursor.moveToFirst();
                    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                    String picturePath = cursor.getString(columnIndex);
                    cursor.close();
//                    MyImage image = new MyImage();
//                    image.setTitle("Test");
//                    image.setDescription(
//                            "test choose a photo from gallery and add it to " +
//                                    "list view");
//                    image.setDatetime(System.currentTimeMillis());
                    File file = new File(picturePath);
                    Uri imageUri = Uri.fromFile(file);

                    Product product = new Product(catID, "custom", "#1111", imageUri.toString(), "15000", "30%", 0);
                    dBhelper.createPRODUCT(product);
                    imageList.add(0, product);
//                        imageList.add(0, imageUri);
                        setimage(imageUri.toString(), imgview, true);
//                    imageList.add(0, picturePath);
                        adapter.notifyDataSetChanged();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }


//                    images.add(image);
                }
                break;

        }
    }

最后在全局變量下面聲明:

    private static final int RESULT_LOAD_IMAGE = 1;
 public static final int MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 3;

確保在清單中定義的以下權限下:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM