Android 我怎样才能确保我的文件保存足够长的时间以供共享?

Android 我怎样才能确保我的文件保存足够长的时间以供共享?,android,android-intent,android-sharing,Android,Android Intent,Android Sharing,我正在开发的应用程序允许用户共享图像,这是通过使用Intent实现的。一切正常,除非处理意图的活动在文件实际共享之前返回 比如说。如果我使用Google Drive共享图像,我的应用程序会在文件实际发送之前收到onActivityResult事件。因为在处理该事件的代码中我删除了临时文件,所以将文件上载到驱动器失败。有没有一种方法可以在不保存文件的情况下共享该文件?或者可以通过某种方式知道它实际上是什么时候发送的,这样就可以删除它了 以下是我的应用程序中的一些相关代码 import androi

我正在开发的应用程序允许用户共享图像,这是通过使用Intent实现的。一切正常,除非处理意图的活动在文件实际共享之前返回

比如说。如果我使用Google Drive共享图像,我的应用程序会在文件实际发送之前收到onActivityResult事件。因为在处理该事件的代码中我删除了临时文件,所以将文件上载到驱动器失败。有没有一种方法可以在不保存文件的情况下共享该文件?或者可以通过某种方式知道它实际上是什么时候发送的,这样就可以删除它了

以下是我的应用程序中的一些相关代码

import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
// ...

public static final int REQUEST_SHARE_ACTION = 1;
private File temporaryShareFile;
// ...

protected void share (Bitmap bitmap) {
    Intent shareIntent = new Intent(Intent.ACTION_SEND);
    shareIntent.setType("image/jpeg");
    if(saveTemporaryFile(bitmap)) {
        shareIntent.putExtra(
                Intent.EXTRA_STREAM, 
                Uri.fromFile(this.temporaryShareFile)
        );
        startActivityForResult(
                Intent.createChooser(shareIntent, "Share Image"), 
                REQUEST_SHARE_ACTION
        );
    } else {
        Toast.makeText(
                this,
                R.string.file_save_fail_message, 
                Toast.LENGTH_LONG
        ).show();
    }
}

protected boolean saveTemporaryFile (Bitmap bitmap) {
    if(createTemporaryFile()) {
        return writeTemporaryFile(bitmap);
    }
    return false;
}

protected boolean createTemporaryFile() {
    this.temporaryShareFile = createFile("tmp_", ".jpg");
    if (this.temporaryShareFile != null) {
        return true;
    } else {
        return false;
    }
}

protected File createFile(String prefix, String suffix) {
    File outputDirectory = new File(
            Environment.getExternalStoragePublicDirectory(
                    Environment.DIRECTORY_PICTURES
            ), 
            getResources().getString(R.string.app_name)
    );
    if(!outputDirectory.isDirectory()) {
        if (!outputDirectory.mkdirs()) {

        }
    }
    File file = null;
    try {
        file = File.createTempFile(
                prefix, 
                suffix, 
                outputDirectory
        );
        return file;
    } catch (IOException ioex) {
        return null;
    }
}

protected boolean writeTemporaryFile(Bitmap bitmap) {
    return writeImageFile(
            this.temporaryShareFile, 
            bitmap, 
            Bitmap.CompressFormat.JPEG, 
            100
    );
}

protected boolean writeImageFile(
        File file, 
        Bitmap bitmap, 
        Bitmap.CompressFormat format, 
        int quality
) {
    try {
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        bitmap.compress(format, quality, fileOutputStream);
        fileOutputStream.close();
        return true;
    } catch (Exception e) {
        //error writing file
        Log.e("writeImageFile",e.getMessage());
        return false;
    }
}

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

    if(requestCode == REQUEST_SHARE_ACTION) {
        temporaryShareFile.delete();
    }
} 

你在听成功事件吗?请参见此处:

我没有在驱动器文件夹中创建文件。我将文件存储在本地,然后使用ACTION\u SHARE意图与驱动器(或任何其他共享提供商)共享文件。您找到解决方案了吗?@hasnain\u ahmad no。