我有一个服务是假设启动 android 音乐应用程序,基本上是让音乐应用程序在屏幕上弹出。我试图这样做的方式是:
public void onStart(Intent intent, int startId)
{
// TODO Auto-generated method stub
super.onStart(intent, startId);
System.out.println("LOGS STARTED");
ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE);
List l = am.getRunningAppProcesses();
Iterator i = l.iterator();
PackageManager pm = this.getPackageManager();
while(i.hasNext())
{
ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next());
try
{
CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));
Log.w("LABEL", c.toString());
if(c.equals("Music"))
{
System.out.println("HELLO \n");
Intent in = new Intent();
in.setClassName("com.android.music", "com.android.music.MediaButtonIntentReceiver");
startActivity(in);
}
}
catch(Exception e)
{
//Name Not FOund Exception
}
}
}
logcat 确实显示 Hello,但由于某种原因,音乐不会开始。但是当我将它移到另一个位置时,它确实开始了。有没有办法以这种方式做到这一点,还是我必须以另一种方式做到这一点?我希望用户单击图标后弹出音乐应用程序。这就是为什么我做了 if c.equals("Music") 部分。之所以在 try 里面是因为这一行:
CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));
会得到一个错误,快速修复是让它被 try/catch 语句包围。