从模块调用MainActivity

时间:2019-06-07 10:13:09

标签: java android android-intent

为了业务逻辑,我有一些Android模块都依赖于相同的库模块。

export const someAsyncAction = (param) => (dispatch, getState) => {
    const { mock } = getState();
    dispatch({
        type: 'SOME_TYPE',
        mock: mock + param,
    })
}

it('should test someAsyncAction', () => {
    const param = ' something';
    const dispatch = jest.fn().mockImplementation();
    const getState = () => ({
        mock: 'mock value',
    });

    const expectedAction = {
        type: 'SOME_TYPE',
        mock: 'mock value something'
    };

    const callback = someAsyncAction(param);
    expect(typeof callback).toBe('function');

    callback.call(this, dispatch, getState);
    expect(dispatch.mock.calls[0]).toEqual([expectedAction])
});

现在,我尝试从库中获取当前的com.example.api -> com.example.app1 -> com.example.app2 -> com.example.app3 MainActivity)。在调用动作时没有指定所需的活动,我为其中具有android.intent.action.MAIN动作的所有设备应用程序获取了IntentPicker。

如何获取当前MAIN的类路径? 即MainActivity

2 个答案:

答案 0 :(得分:0)

作为模块,主应用程序的单独部分,而一个模块基本上包含该应用程序的库类和资源。可以单独创建和测试模块。当您将模块与项目一起使用时,您的主应用程序可以使用该模块的资源,但是您的模块不能使用主应用程序的资源。

要满足您的需求,您可以使用程序包管理器从模块中调用主要活动。您可以在developer site上查看详细信息。呼叫类似

Intent appMainIntent = getPackageManager().getLaunchIntentForPackage("com.app.myproject");
startActivity(appMainIntent);

仅通知您,如果未找到包,则appMainIntent可以为null。因此,请在代码中检查空指针异常。

答案 1 :(得分:0)

要获取应用程序的当前程序包名称,可以调用getApplicationContext().getPackageName()并获取此程序包的启动意图,如@ hari-n-jha所述,可以调用getPackageManager().getLaunchIntentForPackage( String packageName )。 / p>

完整的解决方案是:

String packageName = getApplicationContext().getPackageName();
Intent i = getPackageManager().getLaunchIntentForPackage(packageName);
startActivity(i);