从MyApplication启动其他启动器活动

时间:2018-10-24 11:50:31

标签: java android manifest

我的代码AndroidManifest.xml中,启动器已设置为进行X活动,

public class MyApplication extends Application里面,我有

public static boolean isTablet(Context context) {
    return (context.getResources().getConfiguration().screenLayout
            & Configuration.SCREENLAYOUT_SIZE_MASK)
            >= Configuration.SCREENLAYOUT_SIZE_XLARGE;
}

我要做什么: 在MyApplication内部,以检查用户是否正在通过手机或平板电脑使用顶部显示的方法运行应用程序,如果是平板电脑,则转到活动B;如果是手机,则转到活动A。

我到目前为止所做的事情:

onCreate()

if (!isTablet(MyApplication.this)) {
    Intent intent = new Intent(MyApplication.this, SplashScreen.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
} else {
    Intent intent = new Intent(MyApplication.this, XlSplashScreen.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}

是否可以在清单中省略启动器活动,而让Application类决定应启动哪个活动?

4 个答案:

答案 0 :(得分:1)

您可以创建一个没有布局的新活动,并将其设置为启动活动。然后,在此活动的onCreate()方法中,检查它是平板电脑还是手机,然后启动所需的活动。

但是,我认为您应该避免这种方法,而应该看看Fragments

更新

您不能使Application类决定应启动哪个Activity。 Application类包含应用程序的通用部分,即使未显示您的应用程序,它们也应该可以正常工作。实际上,它经常用于为通知设置事件侦听器,因为即使该应用程序不在屏幕上,也会发生此类被实例化的情况。

另一种解决方案可能是制作两个不同的应用程序,一个用于手机,另一个用于平板电脑。但是,“碎片”方法仍然是最佳方法。

答案 1 :(得分:1)

由于您的活动是一个初始屏幕,所以我认为两者之间的主要区别在于UI配置和大小。因此,您最好的办法是运行相同的活动,但针对不同的屏幕分辨率和方向使用不同的布局文件或资源。这是使用平板电脑的正确方法。

答案 2 :(得分:1)

您应该允许Android通过文件夹结构为您本机处理。

  

res / layout-sw600dp /#适用于7英寸平板电脑(宽600dp及更大)

     

res / layout-sw720dp /#用于10英寸平板电脑(宽720dp和更大)

     

res / layout-sw600dp-port /#适用于纵向7英寸平板电脑(宽600dp或更大)

     

res / layout-sw720dp-port /#用于10英寸纵向平板电脑(宽720dp或更大)

     

res / layout-sw600dp-land /#适用于纵向7英寸平板电脑(宽600dp或更大)

     

res / layout-sw720dp-land /#用于纵向的10英寸平板电脑(宽720dp或更大)

因此,如果要为纵向设计一些横向变体,则可以创建-land文件夹。

如果要为纵向设计一些纵向变体,则可以创建-port文件夹。

或者,如果设计对两者都适用,您也可以直接在size文件夹中答复,而不创建任何-land或-port文件夹。

答案 3 :(得分:0)

您可以使用drawable(-s)文件夹显示不同的初始屏幕。

更多:https://developer.android.com/guide/topics/resources/providing-resources

该应用程序类无意调用startActivity(intent)等。