【问题标题】: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
          }
          

          【讨论】:

            猜你喜欢
            • 2017-11-26
            • 2022-07-06
            • 2016-03-15
            • 1970-01-01
            • 2014-11-10
            • 1970-01-01
            • 1970-01-01
            • 2014-09-27
            • 1970-01-01
            相关资源
            最近更新 更多