Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中找到主活动包的名称?_Android - Fatal编程技术网

如何在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();