wxr
2020-06-15 b8e94316e41eba72d927d5ca7d931b26139ee8ff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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、推送到播放列表到播放器