Java 如何在片段Android中获取PackageManager
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18946471/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
how to getPackageManager in fragment Android
提问by dfuse06
I have this app that I am clearing cache with, but I can't figure out how to get getPackageManagerto work in the fragment.
Here is my code. Any help would be very appreciated. I am very new to android and java. Thank you very much.
我有一个正在清除缓存的应用程序,但我不知道如何getPackageManager在片段中工作。这是我的代码。任何帮助将不胜感激。我对android和java很陌生。非常感谢。
public class Cache extends SherlockFragment {
Button cache;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.cache, null);
cache = (Button) view.findViewById(R.id.button3);
cache.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "Cache is Cleared", Toast.LENGTH_SHORT).show();
PackageManager pm = getPackageManager();
// Get all methods on the PackageManager
java.lang.reflect.Method[] methods = pm.getClass().getDeclaredMethods();
for (java.lang.reflect.Method m : methods) {
if (m.getName().equals("freeStorageAndNotify")) {
// Found the method I want to use
try {
long desiredFreeStorage = Long.MAX_VALUE; // Request for free space
m.invoke(pm, desiredFreeStorage , null);
} catch (Exception e) {
// Method invocation failed. Could be a permission problem
}
break;
}
}
}
private PackageManager getPackageManager() {
// TODO Auto-generated method stub
return null;
}});
return view;
}
}
回答by Blackbelt
you should be able to access getPackageManager(), through getActivity().
您应该能够访问getPackageManager(), 通过getActivity().
For instance getActivity().getPackageManager()
例如 getActivity().getPackageManager()
回答by Gibolt
Kotlin Extension Solution
Kotlin 扩展解决方案
Add this somewhere in your code:
在代码中的某处添加:
val Fragment.packageManager get() = activity?.packageManager
And then simply use packageManager directly in your Fragment code
然后直接在您的 Fragment 代码中使用 packageManager
packageManager?.resolveActivity(intent, 0)
// or
fragment.packageManager?.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT)

