app和uri的内部存储空间

时间:2016-01-24 03:22:27

标签: android twitter bitmap uri internal-storage

所以我正在使用twitter api,我想用我使用的图像发推文:

    TweetUri = Uri.fromFile(saveIT);
    TweetComposer.Builder builder = new TweetComposer.Builder(this)
            .text("")
            .image(TweetUri);
    builder.show();

原始图像是位图,所以我所做的(不确定这是否是最佳方式)是保存在内部存储中:

    private File saveToInternalStorage(Bitmap bitmapImage){
    ContextWrapper cw = new ContextWrapper(getApplicationContext());
    // path to /data/data/yourapp/app_data/imageDir
    File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
    // Create imageDir
    String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmmss").format(new Date());
    String mImageName="MI_"+ timeStamp +".jpg";
    File mypath=new File(directory,mImageName);

    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(mypath);
        // Use the compress method on the BitMap object to write image to the OutputStream
        bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fos);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try
        {
            fos.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    return mypath;
}

当它执行fromfile方法时,它返回的文件将是TweetUri中的“saveIT”。当然这会使存储过载,所以我打算做的是在应用程序停止时擦除应用程序的内部存储空间(除了我为推文保存的临时图像之外,没有其他数据保存在内部存储中):

@Override
protected void onStop() {
    super.onStop();
    File MSD = this.getApplicationContext().getFilesDir();
    File [] lisFiles = MSD.listFiles();
    for(int i=0;i<lisFiles.length;i++)
    {
        boolean deleted = lisFiles[i].delete();
    }
}

这些都不起作用...当我保存它们以验证删除是否正在发生时,我似乎无法找到任何图像。此外,当用户点击推文时,也没有图片添加到推文中。不知道我在这里做错了什么...实际上我不想将图像保存在内部存储中,但我这样做是因为推文api使用URI来发推文而不是位图。

1 个答案:

答案 0 :(得分:1)

我把它切换到写入外部存储器并且工作正常。我还在onDestroy上将其切换为删除。这是更好的,因为当我调用Twitter API时,它会切换活动,因此调用onstop会过早删除临时图片。如果用户在twitter api点击取消,回到我的api然后再次调用twitter api,由于图片已被删除,uri将指向任何内容,这太早了。所有民谣:)