私は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")の部分を実行しました。それが試行の中にある理由は、この行のためです:
CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));
エラーが発生し、迅速な修正は、try/catchステートメントで囲まれるようにすることでした。