在Fragment中的getPackageName()方法

18

我曾使用这种方法来调整Google地图活动中的标记大小:

public Bitmap resizeMapIcons(String iconName,int width, int height){
    Bitmap imageBitmap = BitmapFactory.decodeResource(getResources(),getResources().getIdentifier(iconName, "drawable", getPackageName()));
    Bitmap resizedBitmap = Bitmap.createScaledBitmap(imageBitmap, width, height, false);
    return resizedBitmap;
}

现在我想在一个带有MapView的片段中使用它,但是我遇到了错误:"error: cannot find symbol method getPackageName()"。可能是什么问题呢?

7个回答

59

尝试使用这个替代 getPackageName()

getActivity().getPackageName()

我不使用getPackageManager(),而是使用getPackageName()。但它需要与getActivity().getPackageName()一起使用。谢谢。 - Tamas Koos
抱歉,我犯了一个错误。getPackageName() 是正确的! - steve

6

BuildConfig.APPLICATION_ID


最简单的方法可能是:

String PkgName = BuildConfig.APPLICATION_ID

注:

  • 您可以在代码的任何位置访问BuildConfig
  • 不适用于库。

5
在Kotlin中,获取Fragment的包名可以使用以下代码:context!!.packageName。该代码将返回当前Fragment所在应用程序的包名。

3
getPackageName()

该方法在Activity中定义,无法直接在Fragment中使用。尝试使用以下方法:

    if(getActivity()!=null){
         Bitmap imageBitmap = BitmapFactory.decodeResource(getResources(),getResources().getIdentifier(iconName, "drawable", getActivity().getPackageName()));
         //rest of your code
   }

最好的做法是检查getActivity是否为null,这样你的应用程序就不会崩溃。阅读此SO问题

您还可以在主活动中创建一个静态变量,实例化为包名称。然后在片段中使用该变量。

    public static String PACKAGE_NAME;

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    PACKAGE_NAME = getApplicationContext().getPackageName();
}

现在您可以通过以下方式访问它:

MainActivity.PACKAGE_NAME

我该如何在方法中添加if语句?我不想使用静态变量,因为这样我可以将此方法用于不同的位图。 - Tamas Koos
我的问题是,如果我在return语句之前关闭结束语句,那么我就无法使用resizedBitmap变量,但如果我在return语句之后关闭它,那么该方法就会缺少return语句。 - Tamas Koos

1

Fragment 的 onCreateView() 方法中获取 PackageManager 的另一种方式。

view.getContext().getPackageName()

0

试试这个:

requireActivity().getPackageName()

0

Kotlin 扩展解决方案

将以下代码添加到您的程序中的任意位置:

val Fragment.packageName get() = activity?.packageName

然后在你的Fragment代码中直接使用packageName即可

val name = packageName

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接