2016-07-07 40 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

相关问题