❶ android 怎么获取应用安装包的大小
网上找了一下有两种方法:
1、直接拿到data目录下对应的包,然后用File.length()方法获得。然后会发现和设置里显示的大小不同。
2、通过反射调用设置里源码的方法获得PackageStats类的实例。
两种方法都不想用...
后来自己找到解决办法:
PackageManager类有个getPackageSizeInfo方法如下:
复制代码 代码如下:
public abstract void getPackageSizeInfo(String packageName,
IPackageStatsObserver observer);
只是这个方法是hide的。
自己编译一下的android2.3的Framework框架,把jar包拷出来,只需要把框架导入到library,设置在默认的android的lib之上遍可以优先使用自己编译的框架了,其实也就是让自己应用层能调用框架中的接口。
framework下载:点击此处
下载好后,通过添加lib后把classes.jar添加到此lib中,如图:
下面就是直接使用方法了。
代码如下:
pm.getPackageSizeInfo(packageInfo.packageName,
new IPackageStatsObserver.Stub() {
public void onGetStatsCompleted(PackageStats stats,
boolean succeeded) {
Log.v("King", stats.codeSize);
Log.v("King", stats.dataSize);
Log.v("King", stats.cacheSize);
}
});
第一个参数是包名,想必大家都能拿到。
第二个参数是实现AIDL生成的java接口的匿名内部类。在回调方法里即可处理程序大小数据。
stats.codeSize:应用程序大小
stats.dataSize:数据大小
stats.cacheSize:缓存大小
一般大家可能都是用listView去显示每个应用的大小,而调用getPackageSizeInfo方法是不能立刻拿到值的,所以要和其他数据异步显示。
可以通过handler讲数据发送出去后,然后调用Adapter的notifyDataSetChanged()方法更新显示应用大小。
也许你还想点击每一项可以可以直接跳转到设置里的应用管理界面,而不自己去写卸载、清除缓存等方法。设置源码的方法如下,可以搬过来照样用:
代码如下:
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,Uri.fromParts("package",包名 ,null));
// start new activity to display extended information
startActivityForResult(intent, 1);
❷ android downloadmanager获取下载文件总大小的时候,为什么会返回-1。
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Accept-Encoding", "identity");
conn.connect();
加上中间这一圆薯铅行。(默认使橘好用gzip压缩,导手灶致无法提前获取下载文件的总大小,不让它压缩即可)
❸ android怎么读取sql数据库db文件大小
先简单说下步骤:
将格式为.db的数据库文件放到android项目assets目录中;
在程序必要的时候,将其“拷贝”(文件读取)到Android 程序默认的数据库存储目录中,一般路径为“/data/data/项目包名/databases/“;
自定义SQLiteOpenHelper类,创建一个名字跟步骤1中.db名称一样的数据库;
按照平常逻辑,增删改查数据库。
❹ android如何获取assets文件夹下面文件的大小
InputStream in = getResources().getAssets().open(fileName);
//获滑罩掘信核取文件闷高的字节数
int lenght = in.available();
❺ android为什么用file.lenght()获取文件的大小为0
配坦游简置文件都是用SharedPreferences写的吧,磨拦存在/让裤data/data/<package name>/shared_prefs目录下。
❻ android怎样获取文件的大小
可以用File对象中的length() 方法得到,建一个File对象,指向你的图片即可。
❼ android怎么获取asset目录文件大小
进入手机文件管理器;凳神 sdcard1就是手机内存卡,前面的数字是已用空间,后面的是总容量; 进入枣脊亏sdcard1,长按文野丛件夹,点击更多里的属性,就可看到文件夹的大小。
❽ Android的java怎么获取文件大小
android中的java获取文件大小的方法:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
public class FileContent {
private String path = "F:\\下载说明.txt";
public FileContent() throws IOException
{
File f = new File(path);
FileReader fileReader = new FileReader(f);
BufferedReader br = new BufferedReader(fileReader);
String str;
while((str = br.readLine() ) != null)
{
System.out.println(str);
}
System.out.println(new FileInputStream(new File(path)).available() / 1024 / 1024 +"M");
}
public static void main(String[] args) {
try {
new FileContent();
} catch (IOException e) {
e.printStackTrace();
}
}
}
❾ Android-HttpURLConnection获取下载文件大小
最近项目的友扰磨IOS不能显示图片,但是Android的Glide框架加载又能显示,但是通过网页的形式请求图片发现如下格式:
感觉怪怪的。Glide这种url也能加载? https://static.xxxxx.com/upload/file/201904/16142046y49f.png (正常页面请求是一张图片).
于是想要去获取下远程文件好斗的大小看看能不能获取fileUrl找个能用的就行:
看了下,都ok的...那就不太懂了。Glide怎么做的加载?实际试了下,阿里云获取图片有时候 url链接后面拼了w,h的字段 ,然后请求,那样就可以 - 难道Glide内部做了类似处理? 有李庆空研究下...
❿ 安卓开发上传txt到file读取出来多了一个长度
Copyright © 1999-2020, CSDN.NET, All Rights Reserved
dst
登录
yeqiufeng
关注
Android开发-asset中文件超过1M的解决方法 转载
2012-07-03 18:52:21
yeqiufeng
码龄20年
关注
res/raw和assets的相同点:
1.两者目录下的文件在打包后会原封不动的保存在饥基带apk包中,不会被编锋兆译成二进制。
res/raw和assets的不同点:
1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹
读取文件资源:
1.读取res/raw下的文件资源,通过以下方式获取输入流来进行写操作
InputStream is = getResources().openRawResource(R.id.filename);
2.读取assets下的文件资源,通过以下方式获取输入流来进行写操作
AssetManager am = null ;
am = getAssets();
InputStream is = am.open("filename" );
在未知目录下有哪些文件,该去和获取这些文件的名称并把文件拷贝到目标目录中呢?
String[] files = getAssets().list("");
来获取assets目录下所有文件夹和文件的名称,再通过这些名称再读取我们想要的文件。
Android 对asset与raw的限制
在读取这两个资源文件夹中的文件时会有一定烂芦的限制,即单个文件大小不能超过1M ,如果读取超过1M的文件会报 “Data exceeds UNCOMPRESS_DATA_MAX (1314625 vs 1048576)“ 的IOException。
如何解决呢:
首先想到的是分割文件,再去合并并文件。
假设我们现在要把一个超过1M的文件在程序启动时拷贝到sdcard中
1.先把需要拷贝的大文件分割成若干个大小小于1M的小文件(事先写个程序来分隔或者使用一些工具,我这里直接写了个程序),把这些 小文件放在assets文件夹中。
2.在程序启动时我们获取这些小文件的文件名,当然我们得事先规定小文件的命名方式方便我们来获取这些文件名。
3.通过获得的小文件名分别建立输入流来合并成一个大文件,并拷贝到sdcard中。