2013-11-02 4 views
0

Im новое для обслуживания, поэтому у меня здесь небольшая проблема. Im пытается получить переднего плана имя приложения и я хочу, чтобы распечатать его с тостами, бушель я всегда получаю RuntimeException и я не знаю, почему ... Вот + S код:Android-приложение, получающее приложение foreground

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

Где у вас появляется исключение? Пожалуйста, опубликуйте трассировку стека и logcat – jboi

+0

Я получаю его в методе onStartCommand(), где объявлен ActivityManager – pavle

ответ

0

Служба Android работает сама по себе, без активности. Вы можете связать Activity с сервисом или запустить службу из Activity. В любом случае, поскольку служба не имеет Forefront Activity, ActivityManager недоступен, и вы получаете исключение.

Что вы можете сделать, ознакомьтесь с параметром Intent, который вы получили в onStartCommand. Вы найдете там ограниченную информацию о отправителе намерения. Если вам нравится больше узнать, вы можете добавить дополнительную информацию к намерению вызывающей деятельностью с помощью Intent.putExtra().

Если вы хотите связать операцию с вашим сервисом, используйте метод bindService для Activity. Вы можете отправлять сообщения между ними.

Смежные вопросы