如何让一个apk成为平板电脑上的启动器应用,而只是手机上的普通应用?如何为此配置清单文件?
通过启动器应用程序我的意思是它将显示为在平板电脑上运行apk时的选项之一:
如果在手机上运行相同的apk,则不会显示"选择家庭应用"选择器。
简单来说,这是apk需要的行为:
目标:
我的方法是使用ChooserActivity.java来确定正在运行的设备类型。如果它是平板电脑,它将启动TabletMainActivity.java,如果它是手机,它将启动PhoneMainActivity.java。 (找出它是平板电脑还是手机的代码是可以的。)
ChooserActivity.java
public class ChooserActivity extends AppCompatActivity {
ImageView tabIndicator;
private static final String TAG = "Chooser";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chooser);
Log.d(TAG, "onCreate2() Chooser");
finish();
if (findViewById(R.id.tabIndicator)==null){
//PHONE
startActivity(new Intent(this, PhoneMainActivity.class));
}else{
//TABLET
startActivity(new Intent(this, TabletMainActivity.class));
}
}
}
RES /布局/ activity_chooser.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.sample.tabletchecker.Chooser">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="PHONE"
/>
</RelativeLayout>
RES /布局sw600dp / activity_chooser.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.sample.tabletchecker.Chooser">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="TABLET"
/>
<ImageView
android:layout_width="0dp"
android:layout_height="0dp"
android:id="@+id/tabIndicator"
/>
</RelativeLayout>
TabletMainActivity.java具有以下启动器清单设置:
<activity android:name=".TabletMainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<!-- launcher setting -->
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
PhoneMainActivity.java只是一个普通的活动,清单上没有任何内容。这是故意的,因为我希望这项活动是手机上的正常活动。
<activity android:name=".PhoneActivity">
</activity>
我的ChooserActivity.java是第一个在应用程序被点击/打开时启动的活动,然后它在2之间进行选择。 ChooserActivity清单条目
<activity android:name=".ChooserActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
我尝试了针对TabletMainActivity.java的intent-filter的不同变体,但从未能够获得正确的行为。我总是看到发射器选择器被显示出来。
答案 0 :(得分:0)
请参阅此答案
Determine if the device is a smartphone or tablet?
http://developer.android.com/training/multiscreen/screensizes.html#TaskUseSWQuali
如果您阅读整个主题,他们会解释如何在特定值文件中设置布尔值(如res / values-sw600dp /):
<resources>
<bool name="isTablet">true</bool>
</resources>
因为sw600dp限定符仅对android 3.2以上的平台有效。如果您想确保此技术适用于所有平台(3.2之前),请在res / values-xlarge文件夹中创建相同的文件:
<resources>
<bool name="isTablet">true</bool>
</resources>
然后,在&#34;标准&#34;值文件(作为res / values /),将布尔值设置为false:
<resources>
<bool name="isTablet">false</bool>
</resources>
然后在您的活动中,您可以获取此值并检查您是否在平板电脑尺寸设备中运行:
检查您选择“意图时的活动”
boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
if (tabletSize) {
Intent intent = new Intent(ChooserActivity.this, TabletMainActivity.class);
startActivity(intent);
} else {
Intent intent = new Intent(ChooserActivity.this, PhoneMainActivity.class);
startActivity(intent);
}
Upper Method适用于我
我也为你做了其他方法......
导入强>
import android.content.Context;
import android.content.res.Configuration;
import android.util.DisplayMetrics;
<强>功能强>
public static int FunctionCall(Context context) {
if ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL) {
Intent intent=new Intent(this,PhoneMainActivity.class);
startActivity(intent);
}
else if ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL) {
Intent intent=new Intent(this,PhoneMainActivity.class);
startActivity(intent);
}
else if ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) {
Intent intent=new Intent(this,TabletMainActivity.class);
startActivity(intent);
} else if ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE) {
Intent intent=new Intent(this,TabletMainActivity.class);
startActivity(intent);
}
return value;
}
或根据你做