所以我正在使用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来发推文而不是位图。
答案 0 :(得分:1)
我把它切换到写入外部存储器并且工作正常。我还在onDestroy上将其切换为删除。这是更好的,因为当我调用Twitter API时,它会切换活动,因此调用onstop会过早删除临时图片。如果用户在twitter api点击取消,回到我的api然后再次调用twitter api,由于图片已被删除,uri将指向任何内容,这太早了。所有民谣:)