【发布时间】:2014-01-10 06:27:26
【问题描述】:
我正在尝试计算已安装应用程序的大小。
我找到了答案here
我在部分设备上测试过,除了三星Galaxy Note3(4.3)没有问题。
我收到此错误:java.lang.NoSuchMethodException: getPackageSizeInfo()
我想知道有没有其他方法可以获取已安装应用程序的大小?
【问题讨论】:
我正在尝试计算已安装应用程序的大小。
我找到了答案here
我在部分设备上测试过,除了三星Galaxy Note3(4.3)没有问题。
我收到此错误:java.lang.NoSuchMethodException: getPackageSizeInfo()
我想知道有没有其他方法可以获取已安装应用程序的大小?
【问题讨论】:
试试这个...
public static long getApkSize(Context context, String packageName)
throws NameNotFoundException {
return new File(context.getPackageManager().getApplicationInfo(
packageName, 0).publicSourceDir).length();
}
【讨论】:
也许这个链接会对你有所帮助:
http://nsamteladze.blogspot.com/2012/10/get-apks-code-size-in-android.html
基本上,他正在利用反射的概念,这是一个强大的工具,但并不总是可取的。在此处阅读更多信息:What is reflection and why is it useful?,如果适合您,请使用它。
【讨论】:
您可以在没有 AIDL 文件的情况下获取应用程序大小 -------> Kotlin 语言
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val intent = Intent(Intent.ACTION_MAIN)
intent.addCategory(Intent.CATEGORY_LAUNCHER)
val list = packageManager.queryIntentActivities(intent,0)
// Set adapter to LIST VIEW
listView.adapter = getApps(list)
}
private fun getApps(List: MutableList<ResolveInfo>): List<AppData> {
val list = ArrayList<AppData>()
for (packageInfo in List) {
val packageName = packageInfo.activityInfo.packageName
// return size in form of Bytes(Long)
val size = File(packageManager.getApplicationInfo(packageName,0).publicSourceDir).length()
val item = AppData(Size)
list += item
}
return list
}
}
// Make Data Class
data class AppData(val size: Long)
记得把它从 Bytes 转换成 MB
【讨论】: