2016-07-07 41 views
0

我正在嘗試使用Intent分享應用的apk。嘗試使用gmail附加應用的.apk文件時出現權限錯誤

它可以使用除Gmail以外的所有應用程序共享。當試圖使用gmail附加apk文件時,它說權限被拒絕。 我應該設置哪些權限以及在哪裏?請檢查view.setOnClickListener。

public View getView(final int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     if (null == view) { 

      LayoutInflater layoutInflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = layoutInflater.inflate(R.layout.snippet_list_row, null); 
     } 

     ApplicationInfo applicationInfo = appsList.get(position); 
     if (null != applicationInfo) { 
      TextView appName = (TextView) view.findViewById(R.id.app_name); 
      TextView packageName = (TextView) view.findViewById(R.id.app_paackage); 
      ImageView iconview = (ImageView) view.findViewById(R.id.app_icon); 

      appName.setText(applicationInfo.loadLabel(packageManager)); 
      packageName.setText(applicationInfo.packageName); 
      iconview.setImageDrawable(applicationInfo.loadIcon(packageManager)); 

     } 

     view.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       try { 
       File srcFile = new File(appsList.get(position).publicSourceDir); 
       Intent share = new Intent(); 
       share.setAction(Intent.ACTION_SEND); 
       share.setType("application/vnd.android.package-archive"); 
       share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(srcFile)); 

       context.startActivity(Intent.createChooser(share, "Sharing")); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      } 
     }); 
     return view; 
    } 
+0

gmail不允許發送android應用程序作爲附件,因此「權限被拒絕」。 將它上傳到谷歌驅動器,並從那裏分享。 –

+0

Myappsharer也使用它使用gmail發送它。問題是如何? –

+0

我強烈建議您與合格的法律顧問討論您的應用開發計劃。您正在做的事情可能代表版權侵權行爲,因此瞭解您可能受到的刑事和民事處罰對您而言非常重要。 – CommonsWare

回答

0

READ_EXTERNAL_STORAGE權限是必須requested at runtime在API 23+設備危險的權限。 Gmail不會請求此權限,因此沒有權限讀取您發送的任何file:// URI。

您應該改爲使用FileProviderSharing Files trainingSharing Content blog postFileProvider發送內容URI,允許接收應用程序讀取文件而無需任何額外的權限。

+0

'ApplicationInfo'上的'publicSourceDir'不應該指向外部存儲AFAIK。同樣,'FileProvider'在這裏不起作用,因爲'FileProvider'不能被教導這個特定的位置,儘管其他一些'ContentProvider'可以。 – CommonsWare

+0

@CommonsWare - 是的,如果你想直接使用'FileProvider'(這可能比編寫你自己的ContentProvider更容易),你需要將文件複製到你的緩存/文件/外部文件目錄。 – ianhanniballake

相關問題