using System;
using Android.Content;
using Android.OS;

namespace Shared
{
    public class CommonClass
    {
        /// <summary>
        /// 打开应用
        /// </summary>
        /// <param name="packetName">包名</param>
        /// <param name="activityName"></param>
        public static void OpenApp(string packetName)
        {
            if (Application.Activity == null || packetName == null)
            {
                return;
            }

            if (!isAvilible(Application.Activity, packetName))
            {
                return;
            }
            var pi = Application.Activity.PackageManager.GetPackageInfo(packetName, 0);
            if (pi == null)
            {
                return;
            }
            var resolveIntent = new Intent(Intent.ActionMain, null);
            resolveIntent.AddCategory(Intent.CategoryLauncher);
            resolveIntent.SetPackage(pi.PackageName);

            var apps = Application.Activity.PackageManager.QueryIntentActivities(resolveIntent, 0);

            if (0 < apps.Count)
            {
                var ri = apps[0];
                string pkgName = ri.ActivityInfo.PackageName;
                string className = ri.ActivityInfo.Name;

                var intent = new Intent(Intent.ActionMain);
                intent.AddCategory(Intent.CategoryLauncher);

                //launchFlags:创建一个新的进程来运行这个Activity,也可以不需要,这样就是在当前APP内打开(同一个进程)
                intent.SetFlags(ActivityFlags.NewTask | ActivityFlags.ResetTaskIfNeeded);
                intent.SetAction("android.intent.action.VIEW");
                var cn = new ComponentName(pkgName, className);
                intent.SetComponent(cn);
                Application.Activity.StartActivity(intent);
            }
        }
        /**
* 检查手机上是否安装了指定的软件
* @param context
* @param packageName
* @return
*/
        public static bool isAvilible(Context context, string packageName)
        {
            var packageManager = context.PackageManager;
            var packageInfos = packageManager.GetInstalledPackages(0);
            var packageNames = new System.Collections.Generic.List<string>();

            if (packageInfos != null)
            {
                for (int i = 0; i < packageInfos.Count; i++)
                {
                    var packName = packageInfos[i].PackageName;
                    packageNames.Add(packName);
                }
            }
            // 判断packageNames中是否有目标程序的包名,有TRUE,没有FALSE
            return packageNames.Contains(packageName);
        }
        /// <summary>
        /// 打开界面
        /// </summary>
        /// <param name="action">Action.</param>
        public static void OpenAction(string action){
            try
            {
                Application.Activity.StartActivity(new Intent(action));
            }catch{}
        }

    }
}



//你好,经过测试,我们发现有两种方法都可以实现流媒体的播放。
//第一种:可以实现音乐推送播放,但体验效果很不好,因为获取音乐真实播放地址时间很长,实现思路如下:
//1、我们App先获取Token及时间
//2、然后用Tidal帐号直接登录airable服务器
//3、获取播放列表(不是真实的播放地址)
//4、根据播放列表去获取真实的播放地址(这里获取时间很长,每一首时间长的有五六秒都有可能)
//5、推送到播放器


//第二种:体验效果很好,但发送到播放的密码是加密的,需要算法。实现思路如下:
//1、我们App先获取Token及时间
//2、然后用Tidal帐号直接登录airable服务器并同时把用户名和密码告诉播放器
//3、获取播放列表(不是真实的播放地址,关键信息是ID)
//4、推送到播放列表到播放器