我尝试在用户点击应用程序时创建服务,向用户显示包含应用程序名称的消息。我没有找到解决方案的任何代码。如果你建议一个解决方案,我会很高兴的。谢谢。
我找到了一些代码,但它没有正常工作。它仅显示一个应用程序的消息,即运行服务的应用程序。我想为所有已安装的应用程序显示消息。
@Override
public void onStart(Intent intent, int startId) {
ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> RunningTask = mActivityManager.getRunningTasks(1);
ActivityManager.RunningTaskInfo ar = RunningTask.get(0);
String activityOnTop = ar.topActivity.getClassName();
Toast.makeText(this, activityOnTop, Toast.LENGTH_LONG).show();
答案 0 :(得分:0)
我不知道,这个服务部分将如何运作?
但是这里有一段代码可以帮助您了解哪个应用程序位于前台。
ActivityManager manager = (ActivityManager) context
.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> runningTaskInfo = manager
.getRunningTasks(1);
ComponentName componentInfo = runningTaskInfo.get(0).topActivity;
final PackageManager pm = context.getApplicationContext()
.getPackageManager();
ApplicationInfo ai;
try {
ai = pm.getApplicationInfo(componentInfo.getPackageName(), 0);
} catch (final NameNotFoundException e) {
ai = null;
}
final String applicationName = (String) (ai != null ? pm
.getApplicationLabel(ai) : "(unknown)");
System.out.println("applicationName = " + applicationName);
不幸的是: getRunningTasks方法在API级别21中已弃用 :(
参考:http://developer.android.com/reference/android/app/ActivityManager.html#getRunningTasks(int)
所以要小心使用它,并等到SO用户找到任何其他解决方案。
答案 1 :(得分:0)
而不是While循环我使用了计时器,这对我有用
@Override
public int onStartCommand(Intent intent, int startId,int ff) {
int delay = 100;
int period = 1000;
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask()
{
public void run()
{
demoz();
}
}, delay, period);
return START_STICKY;
}
void demoz(){
ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
final List<ActivityManager.RunningTaskInfo> RunningTask = mActivityManager.getRunningTasks(1);
ActivityManager.RunningTaskInfo ar = RunningTask.get(0);
String activityOnTop = ar.topActivity.getClassName();
Toast.makeText(CreatedWith.this, activityOnTop, Toast.LENGTH_LONG).show();
}