Android 如何发送有意图的zip文件?安卓
我有下面的代码来压缩我想要的Android 如何发送有意图的zip文件?安卓,android,android-intent,zip,Android,Android Intent,Zip,我有下面的代码来压缩我想要的 public class JCreateZIP { private static final int BUFFER = 80000; public int zip(List<String> _files, String zipFileName) { try { BufferedInputStream origin = null; FileOutputStream
public class JCreateZIP {
private static final int BUFFER = 80000;
public int zip(List<String> _files, String zipFileName) {
try {
BufferedInputStream origin = null;
FileOutputStream dest = new FileOutputStream(zipFileName);
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
dest));
byte data[] = new byte[BUFFER];
for (int i = 0; i < _files.size(); i++) {
Log.v("Compress", "Adding: " + _files.get(i));
FileInputStream fi = new FileInputStream(_files.get(i));
origin = new BufferedInputStream(fi, BUFFER);
ZipEntry entry = new ZipEntry(_files.get(i).substring(_files.get(i).lastIndexOf(File.separator) + 1));
out.putNextEntry(entry);
int count;
while ((count = origin.read(data, 0, BUFFER)) != -1) {
out.write(data, 0, count);
}
origin.close();
}
out.close();
} catch (Exception e) {
e.printStackTrace();
}
return 1;
}
private void dirChecker(String dir) {
File f = new File(dir);
if (!f.isDirectory()) {
f.mkdirs();
}
}
public List<String> getListFiles(File file, List<String> files) {
File[] dirs = file.listFiles();
String name = "";
if (dirs != null) {
for (File dir : dirs) {
if (dir.isFile()) {
name = dir.getName().toLowerCase();
if(name.endsWith(".png") || name.endsWith(".jpg")) {
files.add(dir.getAbsolutePath());
}
} else files = getListFiles(dir, files);
}
}
return files;
}
}
public类JCreateZIP{
专用静态最终整数缓冲区=80000;
public int zip(列表文件,字符串zipFileName){
试一试{
BufferedInputStream原点=null;
FileOutputStream dest=新的FileOutputStream(zipFileName);
ZipOutputStream out=新ZipOutputStream(新缓冲输出流(
目的地);
字节数据[]=新字节[缓冲区];
对于(int i=0;i<_files.size();i++){
Log.v(“压缩”,“添加:”+_files.get(i));
FileInputStream fi=新的FileInputStream(_files.get(i));
原点=新的BufferedInputStream(fi,缓冲区);
ZipEntry entry=newzipentry(_files.get(i).substring(_files.get(i).lastIndexOf(File.separator)+1));
外出、外出(进入);
整数计数;
while((count=origin.read(数据,0,缓冲区))!=-1){
输出。写入(数据,0,计数);
}
origin.close();
}
out.close();
}捕获(例外e){
e、 printStackTrace();
}
返回1;
}
专用void dirChecker(字符串dir){
文件f=新文件(dir);
如果(!f.isDirectory()){
f、 mkdirs();
}
}
公共列表getListFiles(文件文件,列表文件){
File[]dirs=File.listFiles();
字符串名称=”;
如果(dirs!=null){
for(文件目录:dirs){
if(dir.isFile()){
name=dir.getName().toLowerCase();
if(name.endsWith(“.png”)| | name.endsWith(“.jpg”)){
add(dir.getAbsolutePath());
}
}else files=getListFiles(dir,files);
}
}
归还文件;
}
}
此代码在单击按钮(共享)时执行。检查下面的代码
String folderPath = Environment.getExternalStorageDirectory() + File.separator + "Folder" + File.separator;
String zipFile = "Item.zip";
File dir = new File(folderPath);
List<String> listFiles;
JCreateZIP zipManager = new JCreateZIP();
listFiles = zipManager.getListFiles(dir, new ArrayList<String>());
if(zipManager.zip(listFiles, folderPath + zipFile) == 1) {
Toast.makeText(getApplicationContext(), "Item.zip created!", Toast.LENGTH_LONG).show();
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(folderPath));
sendIntent.setType("application/zip");
startActivity(sendIntent);
}
String folderPath=Environment.getExternalStorageDirectory()+File.separator+“Folder”+File.separator;
String zipFile=“Item.zip”;
文件目录=新文件(folderPath);
列出清单文件;
JCreateZIP zipManager=new JCreateZIP();
listFiles=zipManager.getListFiles(dir,newarraylist());
if(zipManager.zip(listFiles、folderPath+zipFile)==1){
Toast.makeText(getApplicationContext(),“Item.zip已创建!”,Toast.LENGTH\u LONG.show();
Intent sendIntent=新Intent();
sendIntent.setAction(Intent.ACTION\u SEND);
sendIntent.putExtra(Intent.EXTRA_流,Uri.parse(folderPath));
setType(“应用程序/zip”);
星触觉(sendIntent);
}
但当我试图通过电子邮件发送folder.zip时,蓝牙或gdrive无法工作。我能做什么 我传递了错误的Uri,我更改了以下内容:
String folderPath = Environment.getExternalStorageDirectory() + File.separator + "Folder" + File.separator;
String zipFileName = "Item.zip";
File dir = new File(folderPath);
List<String> listFiles;
File zipFile = File (folderPath + zipFileName);
JCreateZIP zipManager = new JCreateZIP();
listFiles = zipManager.getListFiles(dir, new ArrayList<String>());
if(zipManager.zip(listFiles, folderPath + zipFileName) == 1) {
Toast.makeText(getApplicationContext(), "Item.zip created!", Toast.LENGTH_LONG).show();
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(zipFile));
sendIntent.setType("application/zip");
startActivity(sendIntent);
}
String folderPath=Environment.getExternalStorageDirectory()+File.separator+“Folder”+File.separator;
字符串zipFileName=“Item.zip”;
文件目录=新文件(folderPath);
列出清单文件;
File zipFile=File(folderPath+zipFileName);
JCreateZIP zipManager=new JCreateZIP();
listFiles=zipManager.getListFiles(dir,newarraylist());
if(zipManager.zip(listFiles,folderPath+zipFileName)==1){
Toast.makeText(getApplicationContext(),“Item.zip已创建!”,Toast.LENGTH\u LONG.show();
Intent sendIntent=新Intent();
sendIntent.setAction(Intent.ACTION\u SEND);
sendIntent.putExtra(Intent.EXTRA_流,Uri.fromFile(zipFile));
setType(“应用程序/zip”);
星触觉(sendIntent);
}
你需要说得更具体一些,你试过调试你的应用程序吗?是的,每件事都很好,但当我尝试发送到gdrive时失败了,当我尝试通过gmail发送时,电子邮件工作正常,但存档不在其中