我是服务新手,所以我在这里遇到一些问题。我试图获取前景应用程序名称,我想用吐司打印出来,我总是得到一个runtimeException,我不知道为什么......这里+ s代码:
public class ForegroundAppService extends Service {
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "Foreground service started", Toast.LENGTH_SHORT).show();
try {
ActivityManager activityManager = (ActivityManager)
ForegroundAppService.this.getSystemService(ACTIVITY_SERVICE);
RunningTaskInfo runningTaskInfo = activityManager.getRunningTasks(1).get(0);
String foregroundTaskPackageName =
runningTaskInfo.topActivity.getPackageName().toString();
PackageManager pm = ForegroundAppService.this.getPackageManager();
PackageInfo foregroundAppPackageInfo;
foregroundAppPackageInfo = pm.getPackageInfo(foregroundTaskPackageName, 0);
String foregroundTaskAppName =
foregroundAppPackageInfo.applicationInfo.loadLabel(pm).toString();
Toast.makeText(this, foregroundTaskAppName, Toast.LENGTH_SHORT).show();
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return Service.START_STICKY;
}
}
提前致谢!
答案 0 :(得分:0)
Android服务独立存在,没有活动。您可以将活动绑定到服务或从活动启动服务。在任何情况下,由于服务没有前台活动,因此ActivityManager不可用,您将获得例外。
您可以做的是,查看Intent
中的参数onStartCommand
。您发现有关意图发送者的一些有限信息。如果您想了解更多信息,可以通过调用活动Intent.putExtra()
向Intent添加额外信息。
如果要将Activity与服务紧密绑定,请使用bindService
方法进行活动。您可以在它们之间发送消息。