1

我试图做出一个意图,比如调用意图

            Intent skype = new Intent("android.intent.action.VIEW");
        skype.setData(Uri.parse("skype:" + "user_name" + "?message=ddd"));
        startActivity(skype);

它没有用。

4

2 回答 2

2

官方 Android SDK 以及 Skype URI 的问题是它们不允许共享预定义的消息。您可以只打开与用户列表的聊天(或清空以创建新用户)。如果你想明确地与 Skype 共享一些文本,你可以尝试使用带有 Skype 包名的系统 Intents(记得检查这个包名是否已安装,否则 startActivity 调用会导致你的应用程序崩溃):

val SKYPE_PACKAGE_NAME = "com.skype.raider"

fun shareSkype(context: Context, message: String) {
    if (!isAppInstalled(context, SKYPE_PACKAGE_NAME)) {
        openAppInGooglePlay(context, SKYPE_PACKAGE_NAME)
        return
    }
    val intent = context.packageManager.getLaunchIntentForPackage(SKYPE_PACKAGE_NAME)
    intent.action = Intent.ACTION_SEND
    intent.putExtra(Intent.EXTRA_TEXT, message)
    intent.type = "text/plain"
    context.startActivity(intent)
}

fun isAppInstalled(context: Context, packageName: String): Boolean {
    val packageManager = context.packageManager
    try {
        packageManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES)
    } catch (e: PackageManager.NameNotFoundException) {
        return false
    }
    return true
}
于 2018-04-24T10:59:10.517 回答
0

如果 Skype 或其他 Android 消息应用程序没有公开可用的 Intent,则在它们可用之前无法这样做。

但是,您可以尝试找到 Skype 用来在您的应用程序中调用的代理服务,作为发送消息的一种方式。

http://developer.skype.com/skype-uris/reference#uriChats

注意:

注意事项:

可选主题参数仅适用于多聊天。

主题参数值中的特殊字符——特别是空格——必须被转义。

Mac OS X:忽略任何主题参数。

iOS:不支持。

Android:仅识别初始参与者;不支持多人聊天。

Android 文档 - http://developer.skype.com/skype-uris/skype-uri-tutorial-android

/**
 * Initiate the actions encoded in the specified URI.
 */
public void initiateSkypeUri(Context myContext, String mySkypeUri) {

  // Make sure the Skype for Android client is installed
  if (!isSkypeClientInstalled(myContext)) {
    goToMarket(myContext);
    return;
  }

  // Create the Intent from our Skype URI
  Uri skypeUri = Uri.parse(mySkypeUri);
  Intent myIntent = new Intent(Intent.ACTION_VIEW, skypeUri);

  // Restrict the Intent to being handled by the Skype for Android client only
  myIntent.setComponent(new ComponentName("com.skype.raider", "com.skype.raider.Main"));
  myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

  // Initiate the Intent. It should never fail since we've already established the
  // presence of its handler (although there is an extremely minute window where that
  // handler can go away...)
  myContext.startActivity(myIntent);

  return;
}
于 2013-12-30T17:55:02.240 回答