我知道Context.getApplicationContext()和View.getContext()的可用性,通过它们我实际上可以调用Context.getPackageName()来检索应用程序的包名。

如果我从一个View或Activity对象可用的方法中调用,它们就可以工作,但是如果我想从一个完全独立的没有View或Activity的类中找到包名,有没有办法(直接或间接地)做到这一点?


当前回答

这适用于我在kotlin

       override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
       
        var packageName=applicationContext.packageName // need to put this line
        Log.d("YourTag",packageName)
}

其他回答

对于那些正在使用Gradle的人,就像@Billda提到的,你可以通过以下途径获取包名:

BuildConfig.APPLICATION_ID

这给了你在你的应用程序gradle中声明的包名:

android {
    defaultConfig {
        applicationId "com.domain.www"
    }
}

如果您有兴趣获得java类使用的包名(有时与applicationId不同),您可以使用

BuildConfig.class.getPackage().toString()

如果你不知道该用哪一个,请阅读这里:

注意:应用程序ID过去是直接绑定到代码的 包名称;所以一些Android api使用术语“包名” 方法名和参数名,但这实际上是你的 应用程序ID。例如,Context.getPackageName()方法 返回你的应用ID。没有必要分享你的代码 应用程序代码外的真实包名。

只需导入Android。App,然后你可以使用: < br / > Application.getProcessName () < br / >

获取不包含上下文、视图或活动的当前应用程序进程名。

如果你使用gradle build,使用这个:BuildConfig。APPLICATION_ID获取应用程序的包名。

一个想法是在你的主活动中有一个静态变量,实例化为包名。然后引用那个变量。

你必须在主活动的onCreate()方法中初始化它:

类的全局:

public static String PACKAGE_NAME;

然后. .

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

    PACKAGE_NAME = getApplicationContext().getPackageName();
}

然后可以通过Main.PACKAGE_NAME访问它。

如果你的意思是没有一个明确的Context(例如来自后台线程),你应该在你的项目中定义一个类:

public class MyApp extends Application {
    private static MyApp instance;

    public static MyApp getInstance() {
        return instance;
    }

    public static Context getContext(){
        return instance;
        // or return instance.getApplicationContext();
    }

    @Override
    public void onCreate() {
        instance = this;
        super.onCreate();
    }
}

然后在清单中,您需要将这个类添加到Application选项卡的Name字段中。或者编辑xml并放置

<application
    android:name="com.example.app.MyApp"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    .......
    <activity
        ......

然后你可以在任何地方打电话

String packagename= MyApp.getContext().getPackageName();

希望能有所帮助。