【发布时间】: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