AndroidTv和智能手机在一个应用程序/不同的启动器中
我正在写一个应用程序,将服务于电视和智能手机。现在我只想根据设备的不同来区分主屏幕。 我放置了碎片,因此根据设备的不同排列。 但当我在电视上启动应用程序时,启动的不是tvActivity,而是mainActivity 另外,我在清单中有两个启动器,一个AndroidTv和智能手机在一个应用程序/不同的启动器中,android,android-fragments,manifest,launcher,leanback,Android,Android Fragments,Manifest,Launcher,Leanback,我正在写一个应用程序,将服务于电视和智能手机。现在我只想根据设备的不同来区分主屏幕。 我放置了碎片,因此根据设备的不同排列。 但当我在电视上启动应用程序时,启动的不是tvActivity,而是mainActivity 另外,我在清单中有两个启动器,一个 <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.L
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
主要活动:
public class TvActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tv);
}
}
public class MainActivity extends AppCompatActivity {
public static final String TAG = "TAG";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);
if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) {
Log.d(TAG, "Running on a TV Device");
setContentView(R.layout.activity_tv);
} else {
setContentView(R.layout.activity_main);
Log.d(TAG, "Running on a non-TV Device");
}
}
}
通过这个测试,我可以区分并选择正确的布局,但我不明白电视为什么要启动MainActivity
谢谢将此作为您的清单。它会起作用的
<?xml version="1.0" encoding="utf-8"?>
您可能需要创建一个支持电视屏幕大小的版面resuce文件夹,请尝试阅读此链接中的文档谢谢链接!事实上,我只是注意到了一件事,如果我颠倒清单中活动的顺序,那就是第一个计数的人。如果我将TvActivity置于MainActivity之前,则两台设备(电视和智能手机)都将启动TvActivity。那么,如何才能有所作为呢?有可能有多个“launchedActivity”吗?我从不尝试使用两个启动器活动制作na应用程序,当我需要在不同屏幕中使用不同的布局时,我会按照谷歌的建议做,但你可以尝试在谷歌中搜索。我面临着同样的问题。拥有2个启动器将启动清单中的第一个启动器。如果有人提出解决方案,我将不胜感激。
public class MainActivity extends AppCompatActivity {
public static final String TAG = "TAG";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);
if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) {
Log.d(TAG, "Running on a TV Device");
setContentView(R.layout.activity_tv);
} else {
setContentView(R.layout.activity_main);
Log.d(TAG, "Running on a non-TV Device");
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<uses-feature
android:name="android.software.leanback"
android:required="true" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.Leanback">
<activity
android:name=".MainActivity"
android:banner="@drawable/app_icon_your_company"
android:icon="@drawable/app_icon_your_company"
android:label="@string/app_name"
android:logo="@drawable/app_icon_your_company"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".DetailsActivity" />
<activity android:name=".PlaybackOverlayActivity" />
<activity android:name=".BrowseErrorActivity" />
</application>