【问题标题】:AndroidTv and Smartphone in one app / Different launcherAndroidTv 和智能手机在一个应用程序/不同的启动器中
【发布时间】:2017-07-21 13:08:29
【问题描述】:

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

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

<action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />

和其他的

<action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />

这是我的代码:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.jamesp.fragmenttest">

    <uses-feature android:name="android.software.leanback"
        android:required="false" />


    <!--Unsupported TV hardware features-->
    <uses-feature android:name="android.hardware.touchscreen"
        android:required="false"/>
    <uses-feature android:name="android.hardware.faketouch"
        android:required="false"/>
    <uses-feature android:name="android.hardware.telephony"
        android:required="false"/>
    <uses-feature android:name="android.hardware.camera"
        android:required="false"/>
    <uses-feature android:name="android.hardware.nfc"
        android:required="false"/>
    <uses-feature android:name="android.hardware.location.gps"
        android:required="false"/>
    <uses-feature android:name="android.hardware.microphone"
        android:required="false"/>
    <uses-feature android:name="android.hardware.sensor"
        android:required="false"/>



    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:banner="@mipmap/ic_launcher">



        <activity android:name=".MainActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


        <activity android:name=".TvActivity"
            android:label="@string/app_name"
            android:theme="@style/Theme.Leanback">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
            </intent-filter>
        </activity>


    </application>

</manifest>

电视活动:

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");
        }
    }
}

通过这个测试,我可以区分并因此选择正确的布局,但我不明白为什么 Tv 会启动 MainActivity。

谢谢

【问题讨论】:

  • 可能你需要创建一个支持电视屏幕尺寸的布局resuce文件夹尝试阅读此链接developer.android.com/guide/practices/screens_support.html的文档
  • 感谢您的链接!实际上我只是注意到了一些事情,如果我将清单中的活动顺序颠倒过来,那就是第一个计数的人。如果我将 TvActivity 放在 MainActivity 之前,两个设备(电视和智能手机)都会启动 TvAcitivty。那么如何有所作为呢?是否可以有多个“launchedActivity”?
  • 我从不尝试使用两个启动器活动制作 na 应用程序,当我需要在不同屏幕上的不同布局时,我会按照 Google 的建议进行操作,但您可以尝试在 Google 中搜索。
  • 我也面临同样的问题。拥有 2 个启动器将启动清单中的第一个。如果有人提出解决方案,将不胜感激。

标签: android android-fragments manifest launcher leanback


【解决方案1】:

将此作为您的清单。它会起作用的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多