【问题标题】:How to open Skype if the device is tablet otherwise make a call action如果设备是平板电脑,如何打开 Skype,否则拨打电话
【发布时间】:2014-03-18 07:16:59
【问题描述】:
1)当我的应用程序启动时,它会显示带有呼叫按钮的警报对话框。如果它是手机,我必须允许用户呼叫。如果是平板电脑而不是点击按钮,Skype 应该打开,如果未安装 skype,则打开游戏商店。
public class MainActivity extends Activity {
private Button call_btn, cancle_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
call_btn = (Button) findViewById(R.id.call_button);
cancle_btn = (Button) findViewById(R.id.cancel_button);
call_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:123456789"));
startActivity(callIntent);
}
});
}
}
【问题讨论】:
标签:
android
skype
phone-call
【解决方案1】:
使用这种方法,你实际上可以判断它是平板电脑还是手机:
public static boolean isTablet(Context context) {
return (context.getResources().getConfiguration().screenLayout
& Configuration.SCREENLAYOUT_SIZE_MASK)
>= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
因此,您已经编写的代码应该可以正常使用电话拨号器拨打电话。对于平板电脑,您可以使用此方法进行Skype通话:
public static void skype(String number, Context ctx) {
try {
Intent sky = new Intent("android.intent.action.VIEW");
sky.setData(Uri.parse("skype:" + number));
ctx.startActivity(sky);
} catch (ActivityNotFoundException e) {
//Skype not installed
}
}
ActivityNotFoundException 可以被捕获,这意味着没有安装 Skype。
因此您可以使用此代码将用户带到 Playstore:
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=com.skype.raider" )));
P.S:如果您的唯一要求是确定它是平板电脑还是手机,上述方法有效。如果您想查找 Sim 是否存在或任何类似的东西,您可以使用其他答案中的代码。
【解决方案2】:
以下是检查设备是手机还是平板电脑的快速示例
TelephonyManager manager =
(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
if (manager.PhoneType == PhoneType.None) {
// Not a phone, open Skype
}
else {
// It is a phone, show dial
}
您可以通过确保 SIM 卡可用来更进一步
if (manager.getSimState() != TelephonyManager.SIM_STATE_ABSENT){
// Open skype
} else {
// Can dial
}
将此答案与其他向您展示如何启动 Skype 的答案结合起来,您应该有一个可行的解决方案!
【解决方案3】:
您可以按照步骤来达到要求。
第 1 步:您可以将此代码保留在您的按钮单击下或 onCreate 中。
if(isTelePhonyAvailable()){
//Do Telephony calling stuff
} else if(isSkypeInstalled()){
//Do Skype calling stuff
} else {
//Open google play to download the skype application
openGooglePlayToDownloadSkype();
}
第 2 步:只需将这些方法复制粘贴到您的活动文件中即可。方法名称将清楚地表明他们在做什么。
private boolean isTelePhonyAvailable(){
TelephonyManager tm= (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
if(tm.getPhoneType()==TelephonyManager.PHONE_TYPE_NONE){
return false;
}
return true;
}
private boolean isSkypeInstalled(){
boolean isInstalled = false;
String appPackageName = "com.skype.raider";
PackageManager pm = getPackageManager();
try {
pm.getPackageInfo(appPackageName, PackageManager.GET_ACTIVITIES);
isInstalled = true;
} catch (PackageManager.NameNotFoundException e) {
isInstalled = false;
}
return isInstalled;
}
private void openGooglePlayToDownloadSkype(){
String appPackageName = "com.skype.raider";
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
}
第三步:最后你需要一些权限。
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
希望对你有帮助..:)
【解决方案4】:
试试这个:
public class MainActivity extends Activity{
public Button call_btn, cancel_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
call_btn = (Button) findViewById(R.id.call_button);
cancle_btn = (Button) findViewById(R.id.cancel_button);
call_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(deviceIsTablet){
if(isAppInstalled("com.skype.android")){
}else{
}
}else{
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:123456789"));
startActivity(callIntent);
}
}
});
}
// determine whether or no the android device is a tablet or not
public static boolean deviceIsTablet(Context c) {
return (c.getResources().getConfiguration().screenLayout
& Configuration.SCREENLAYOUT_SIZE_MASK)
>= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
private boolean isAppInstalled(String app) {
PackageManager packagemanager = getPackageManager();
boolean isOnDevice = false;
try {
packagemanager.getPackageInfo(app, PackageManager.GET_ACTIVITIES);
isOnDevice = true;
} catch (PackageManager.NameNotFoundException exception) {
isOnDevice = false;
}
return isOnDevice;
}
}
【解决方案5】:
试试这个方法
Intent intent = new Intent(Intent.ACTION_CALL);
PackageManager manager = mContext.getPackageManager();
List<ResolveInfo> list = manager.queryIntentActivities(intent, 0);
if (list != null && list.size() > 0) {
//At least one activity available to make calls
} else {
//No activity to handle calls.//start skype call
}