【问题标题】:The method getSystemService(String) is undefined for the type Listen未为 Listen 类型定义方法 getSystemService(String)
【发布时间】:2011-08-05 23:14:53
【问题描述】:

我正在尝试检查 com.android.music 是否正在运行,我在这一行收到以下错误 this.getSystemService(Context.ACTIVITY_SERVICE);

错误:

没有为Lis​​ten类型定义方法getSystemService(String)

代码:

public boolean isMusicRunning() {        
    ActivityManager activityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses();
    for (int i = 0; i < procInfos.size(); i++) {
        if (procInfos.get(i).processName.equals("com.android.music")) {
            Toast.makeText(null, "music is running",
                    Toast.LENGTH_LONG).show();
        }
    }
}

如果你能让我知道我在这里做错了什么,那就太好了!

【问题讨论】:

  • 那是什么类?它扩展了什么?
  • 这个类没有扩展任何东西..我从另一个问题中复制了这段代码..不确定他的类也在扩展什么..

标签: android


【解决方案1】:

getSystemServiceContext 类的方法,因此您需要在上下文中运行它。

您从中复制的原始代码可能是从Activity 派生类运行的。如果Context 参数不在 Activity 中,则需要将其传递给您的方法。

【讨论】:

    【解决方案2】:

    你应该像这样使用它:

    public boolean isMusicRunning(Context context) {
        ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses();
        for (int i = 0; i < procInfos.size(); i++) {
            if (procInfos.get(i).processName.equals("com.android.music")) {
                Toast.makeText(null, "music is running", Toast.LENGTH_LONG).show();
            }
        }
    } 
    

    【讨论】:

      【解决方案3】:

      两个答案都是正确的,但没有人指出您的问题的正确解决方案。

      您应该使用广播接收器来获取当前播放的歌曲。

      private BroadcastReceiver mReceiver = new BroadcastReceiver() {
      
          @Override
          public void onReceive(Context context, Intent intent) {
              String action = intent.getAction();
              String cmd = intent.getStringExtra("command");
              Log.v("tag ", action + " / " + cmd);
              String artist = intent.getStringExtra("artist");
              String album = intent.getStringExtra("album");
              String track = intent.getStringExtra("track");
              Log.v("tag", artist + ":" + album + ":" + track);
              Toast.makeText(CurrentMusicTrackInfoActivity.this, track, Toast.LENGTH_SHORT).show();
          }
      };
      

      然后在创建时添加

      IntentFilter iF = new IntentFilter();
      
      iF.addAction("com.android.music.metachanged");
      iF.addAction("com.htc.music.metachanged");
      
      iF.addAction("fm.last.android.metachanged");
      iF.addAction("com.sec.android.app.music.metachanged");
      iF.addAction("com.nullsoft.winamp.metachanged");
      iF.addAction("com.amazon.mp3.metachanged");     
      iF.addAction("com.miui.player.metachanged");        
      iF.addAction("com.real.IMP.metachanged");
      iF.addAction("com.sonyericsson.music.metachanged");
      iF.addAction("com.rdio.android.metachanged");
      iF.addAction("com.samsung.sec.android.MusicPlayer.metachanged");
      iF.addAction("com.andrew.apollo.metachanged");
      registerReceiver(mReceiver, iF);
      

      也可以看看this

      123 abc 的更好答案

      用于简单检查音乐是否正在播放。使用

      AudioManager manager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
      if(manager.isMusicActive())//it checks whether music is played by Android OS
       {
           // Something is being played.
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-21
        • 1970-01-01
        • 1970-01-01
        • 2023-01-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多