如何在android中找到主活动包的名称?
我的主要活动从以下几点开始:如何在android中找到主活动包的名称?,android,Android,我的主要活动从以下几点开始: package com.example.alexander.bootintervals; import android.content.Intent; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.
package com.example.alexander.bootintervals;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import com.example.alexander.libraryproject.MyLogger;
public class MainActivity extends AppCompatActivity {
...
现在我正在使用另一个包中的一些代码,例如在
package com.example.alexander.libraryproject
中。如何获取定义主要活动的主要应用程序/包的名称?是否有方法从驻留在com.example.alexander.libraryproject
中的名为的代码中提取字符串com.example.alexander.bootInterval
String packageName = BuildConfig.APPLICATION_ID
尝试
MainActivity.class.getCanonicalName()
并忽略最后一个句点及其后面的类名。非常简单:
String full_package_name = MainActivity.class.getCanonicalName();
如果模块中没有任何上下文,请执行以下操作:
1-在您的模块中定义如下所示的接口(比如X模块):
2-在您的应用程序模块(比如A和B)中,您需要向模块X发送此接口的实现,如下所示:
public class ProviderImpl implements Provider{
@Override
public String getPackageName()
{
return BuildConfig.APPLICATION_ID;
}
}
然后将实现发送到模块X,方法如下:
ModuleX obj=new ModuleX(new ProviderImpl());
您可以向这个接口添加任何您想要的内容,并使您的模块实现它
然后,在模块X中,只需调用实现的getPackageName()方法并获取packageName;) 您可以在
MainActivity
中添加静态函数getInstance()
,该函数返回它的上下文,您可以使用它获取它的上下文并调用函数,该函数为您提供包名,如下所示:
public class MainActivity extends AppCompatActivity {
private static MainActivity instance;
public MainActivity () {
instance = this;
}
public static MyApplication getInstance() {
return instance;
}
并按如下方式使用:
请检查此答案,但我在共享库的代码中没有上下文。检查我的答案我认为它解决了获取MainActivity上下文的问题。我建议您通过初始化方法将
getApplicationContext()
从活动传递到库。否则lib在编译或运行时都不会知道应用程序no不工作。未定义MainClass
,也未定义名称MainActivity
,因为我正在库中尝试此代码。没有更新主activityAnswer以使用无上下文的BuildConfig。这不是我想要的。这样,我就得到了库的名称,而不是调用库的主代码的名称。我喜欢com.example.alexander.libraryproject
,但我想要的是com.example.alexander.bootInterval
…我不知道如何优雅地做到这一点。不确定在没有上下文的情况下是否可以执行。但是,您可以在类定义中放置一个公共静态字符串libraryName=“com.example.alexander.libraryproject”
,并以这种方式调用它。我知道它不优雅,但它会工作…你是说什么级别?“LibraryProject”中的一个?我的意思是对于LibraryProject
和bootInterval
中的每个类(在您的示例中,您显示了MyLogger
类),放入可以从任何地方调用的静态字符串变量。我在库中没有主要活动。没那么简单!!你为什么不把包裹寄给我去图书馆呢?您的模块中有任何上下文吗?如果您有其他方法来实现SOI,那么如果您自己的项目将使用该模块,您可以在清单中定义元数据并在模块中读取(甚至是纯java模块)!!不,安卓所做的一切都是合乎逻辑的。您可以从库中访问MainActivity,但它会产生循环依赖关系。最好的方法是在android模块中传递一个上下文,或者将packagename作为字符串传递给library。看,我更新了答案这是最简单的方法,但是你也可以发送一个字符串变量而不是实现,但这不是最佳做法;)库函数不知道任何main活动
。它不能工作…你在libraryProject中有更多的主要活动,在BootInterval中有另一个吗?没有,我在“libraryProject”中没有主要活动。它只包含我在不同项目中使用的类。只有“bootinterval”包含MainActivity库函数不知道任何MainActivity..这是什么意思,尝试此解决方案后您的问题到底在哪里问题是,AndroidStudio不知道名为MainActivity
的类。术语MainActivity
在代码中的AndroidStudio编辑器中以红色字母标记,即在LibraryProject
中。项目LibraryProject
不包含类MainActivity
。
public class MainActivity extends AppCompatActivity {
private static MainActivity instance;
public MainActivity () {
instance = this;
}
public static MyApplication getInstance() {
return instance;
}
MainActivity.getInstance.getPackageName();