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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 12:48:27  来源:igfitidea点击:

how to getPackageManager in fragment Android

javaandroid

提问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)