【问题标题】:Youtube API ActivityNotFoundException on Gingerbread姜饼上的 Youtube API ActivityNotFoundException
【发布时间】:2013-01-23 10:10:03
【问题描述】:

当我尝试在姜饼上运行 youtube api StandAlonePlayerActivity 时出现 ActivityNotFoundException 错误。在 ICS 上运行良好的地方

这是我的日志猫

01-23 15:34:28.071: E/AndroidRuntime(3378): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.google.android.youtube.api.StandalonePlayerActivity.START (has extras) }
01-23 15:34:28.071: E/AndroidRuntime(3378):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1545)
01-23 15:34:28.071: E/AndroidRuntime(3378):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1515)
01-23 15:34:28.071: E/AndroidRuntime(3378):     at android.app.Activity.startActivityForResult(Activity.java:2988)
01-23 15:34:28.071: E/AndroidRuntime(3378):     at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:701)
01-23 15:34:28.071: E/AndroidRuntime(3378):     at android.support.v4.app.Fragment.startActivity(Fragment.java:787)
01-23 15:34:28.071: E/AndroidRuntime(3378):     at com.example.demo.TipsFragment$2.onClick(TipsFragment.java:143)
01-23 15:34:28.071: E/AndroidRuntime(3378):     at android.view.View.performClick(View.java:2533)
01-23 15:34:28.071: E/AndroidRuntime(3378):     at android.view.View$PerformClick.run(View.java:9320)
01-23 15:34:28.071: E/AndroidRuntime(3378):     at android.os.Handler.handleCallback(Handler.java:587)
01-23 15:34:28.071: E/AndroidRuntime(3378):     at android.os.Handler.dispatchMessage(Handler.java:92)
01-23 15:34:28.071: E/AndroidRuntime(3378):     at android.os.Looper.loop(Looper.java:150)
01-23 15:34:28.071: E/AndroidRuntime(3378):     at android.app.ActivityThread.main(ActivityThread.java:4389)
01-23 15:34:28.071: E/AndroidRuntime(3378):     at java.lang.reflect.Method.invokeNative(Native Method)
01-23 15:34:28.071: E/AndroidRuntime(3378):     at java.lang.reflect.Method.invoke(Method.java:507)
01-23 15:34:28.071: E/AndroidRuntime(3378):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
01-23 15:34:28.071: E/AndroidRuntime(3378):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
01-23 15:34:28.071: E/AndroidRuntime(3378):     at dalvik.system.NativeStart.main(Native Method)

这是我用来启动播放器的代码

String vid=getYoutubeVideoId(vlink);
Intent intent=YouTubeStandalonePlayer.createVideoIntent(getActivity(),DEVELOPER_KEY, vid, 0,true,false);
startActivity(intent);

startActivity 出现错误

这里是 getYoutubeVideoID() 代码:

/*
     * Getting id of video from url
     */
    public static String getYoutubeVideoId(String youtubeUrl)
    {
        String video_id="";
        if (youtubeUrl != null && youtubeUrl.trim().length() > 0 && youtubeUrl.startsWith("http"))
        {

            String expression = "^.*((youtu.be"+ "\\/)" + "|(v\\/)|(\\/u\\/w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#\\&\\?]*).*"; // var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
            CharSequence input = youtubeUrl;
            Pattern pattern = Pattern.compile(expression,Pattern.CASE_INSENSITIVE);
            Matcher matcher = pattern.matcher(input);
            if (matcher.matches())
            {
                String groupIndex1 = matcher.group(7);
                if(groupIndex1!=null && groupIndex1.length()==11)
                    video_id = groupIndex1;
            }
        }
        return video_id;
    }

【问题讨论】:

  • 你有开发者密钥吗??你能给我你正在使用的视频的ID吗?贴出getYoutubeVideoId(vlink)的代码;
  • @edwin 是的,我有开发者密钥。我在我的问题中提到它在 ICS 上运行。我已经尝试使用来自 youtube api 的 SimplePlayerView

标签: android youtube-api


【解决方案1】:

首先检查您的设备上是否可以使用 youtube 服务,然后尝试启动该活动。 YouTubeApiServiceUtil.isYouTubeApiServiceAvailable(mContext)。还可以尝试从 Google Play 安装 youtube 应用。

文档中的小注释: Note: Users need to run version 4.2.16 of the mobile YouTube app (or higher) to use the API.

编辑:这就是你使用它的方式:

if(YouTubeApiServiceUtil.isYouTubeApiServiceAvailable(mContext).equals(YouTubeInitializationResult.SUCCESS)){
   //This means that your device has the Youtube API Service (the app) and you are safe to launch it. 

}else{
   // Log the outcome, take necessary measure, like playing the video in webview :)  
}

在此处查看YouTubeInitializationResult 枚举https://developers.google.com/youtube/android/player/reference/com/google/android/youtube/player/YouTubeInitializationResult

还有关于上述课程的哲学: https://developers.google.com/youtube/android/player/reference/com/google/android/youtube/player/YouTubeApiServiceUtil

【讨论】:

  • 你可以为 YouTubeApiServiceUtil.isYouTubeApiServiceAvailable(上下文上下文)粘贴一个 sn-p
【解决方案2】:

设备应安装最新的 YouTube 应用。

【讨论】:

    【解决方案3】:

    您是否在模拟器上运行该应用程序?它可能无法在模拟器上运行,因为默认情况下未安装 youtube 播放器。尝试在实际设备上运行它。

    【讨论】:

    • 我在 Htc explorer 上运行它
    • 您的设备中是否安装了 Youtube 应用?
    • 你试过升级播放器了吗?
    【解决方案4】:

    为了在android上使用YouTube api,你需要3个参数

    1) YouTube Developer Key

    2)视频 ID

    3)最新官方YouTube Android App(4.2.16版)

    通过查看你的日志猫,我认为其中一个丢失了

    Refer

    【讨论】:

    • 它在 Ics 上运行良好。我已经从here下载了最新版本的youtube api
    • 好的,我在 Android 2.1 上测试了演示应用程序,对我来说效果很好.. youtube api 需要最新版本的 youtube 官方应用程序来播放视频。您手机中的 youtube 应用是最新版本吗?
    【解决方案5】:

    你必须在你的设备上安装 YouTube Android 应用,它对我有用!

    【讨论】:

      【解决方案6】:

      我建议对@Nikola 的回答进行一些改进。可以显示本地化对话框getErrorDialog() 来处理一些用户可恢复的错误isUserRecoverableError。例如,当 YouTube 应用在“设置”中被禁用时。

      val result = YouTubeApiServiceUtil.isYouTubeApiServiceAvailable(context)
      when {
          result == YouTubeInitializationResult.SUCCESS -> startYouTubeActivity()
          result.isUserRecoverableError -> result.getErrorDialog(activity, 0).show()
          else -> toast("Something went wrong!")
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多