【发布时间】:2012-12-01 19:05:47
【问题描述】:
我有一个服务是用来启动安卓音乐应用程序的,基本上是让音乐应用程序在屏幕上弹出。我尝试这样做的方式是:
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 语句包围。
【问题讨论】:
-
只是猜测...“com.android.music.MediaButtonIntenrtReceiver”->“com.android.music.MediaButtonIntentReceiver”
-
绝对有可能。如果音乐不响,那就是别的问题了……
-
@Thomas 我不想播放音乐,我只想弹出应用程序,但它不会弹出。
-
try catch 不是“快速修复”。这是您控制预期和意外错误的方式。很可能你会因为你在你的 catch 块中什么都不做而得到一个你隐藏的错误。要么在你的 catch 上设置一个断点并检查异常,要么将其删除并检查 logcat 是否有错误。然后用确切的问题编辑您的问题。
-
try-catch块与您的其余代码没有任何关系。正如 dougcunha 所说,您在in.setClassName("com.android.music", "com.android.music.MediaButtonIntenrtReceiver");行上有错字 -IntenrtReceiver应该是IntentReceiver
标签: android android-intent service android-activity try-catch