2017-05-03 23 views
-1

私は自分の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" /> 

を提出している私は、デバッガを使用して、私は、ファイルが読み込まれていることを観察しましたファイルの場所からは、なぜそれが接続されていないか分からない。

ご協力いただければ幸いです。

ありがとうございます。

+1

あなたが必要なランタイムを追加しました:

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

は許可の下にあなたがマニフェストに定義されていることを確認してくださいあなたの選択した添付ファイルについては、以下のEディスクからファイルを読み取るためのアクセス許可を明示しますか? –

+0

はいAndroidManifest.xmlファイルにこれらのアクセス許可を追加しました。 @ cricket_007 –

+0

あなたのログトレースを投稿する –

答えて

0

は、以下のように試してみてください。

は、実行時のアクセス許可を確認するためのメソッドを作成します。今

@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; 

    } 
} 

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); 
} 

今すぐ下記のような許可結果を処理

@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; 
    } 
} 

は今すぐ上のボタンのクリックを添付します好きな活動の結果を処理する

@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; 

     } 
    } 

そして最後にグローバル変数の下に宣言します:

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

質問はディスクから読み込みたいだけですが、ギャラリーを使用していません。画像 –

+0

@ cricket_007はいbuddy私は彼女がランタイムpermission.soと私はそれのサンプルを与えているとギャラリーから画像を選択した場合は、ストレージの許可を使用していると思います –

+0

書き込み権限は電子メールの添付ファイルのために必要ではないので、 、それは完全に質問に答えるわけではありません、それは私が言っていることです –

関連する問題