AndroidTv和智能手机在一个应用程序/不同的启动器中

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

我正在写一个应用程序,将服务于电视和智能手机。现在我只想根据设备的不同来区分主屏幕。 我放置了碎片,因此根据设备的不同排列。 但当我在电视上启动应用程序时,启动的不是tvActivity,而是mainActivity

另外,我在清单中有两个启动器,一个

<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>