如何确定前一个活动是来自我的应用程序?

3

我如何知道从上一个Activity到当前Activity的导航是否属于我的应用程序?也就是说,上一个屏幕是我的应用程序/写在我的清单文件中还是主屏幕或通话屏幕?

有没有一种方法可以不通过Intent传递信息来知道这一点?

谢谢。


1
你可能可以使用ActivityManager来获取正在运行的任务列表,但这需要GET_TASKS权限,除非你的应用程序与管理任务相关的某些明显功能有关,否则用户会发现你请求此权限很奇怪。为什么你需要知道上一个屏幕是否是你的? - Karakuri
真的有三个选择:从主页、呼叫屏幕或搜索,不是吗? - Hoan Nguyen
2个回答

1
我没有足够的声望在回答中发表评论,但出于某种原因,我能够回答问题。我认为应该反过来:S(我是新来的)
借鉴Pragnani的答案,我也在寻找之前的活动而不是当前的活动。回答Alexander Malakhov的评论:
topActivity始终来自当前包(如果不是服务等)。您有例子吗?即顶部RunningTask(0)。topActivity会给您当前的活动,而不是先前的。
只需更改:
String packageName = am.getRunningTasks(1).get(0).topActivity.getPackageName();
String className = am.getRunningTasks(1).get(0).topActivity.getClassName();

to

String packageName = am.getRunningTasks(2).get(1).topActivity.getPackageName();
String className = am.getRunningTasks(2).get(1).topActivity.getClassName();

-1

试试这个

我认为你可以通过检查你的应用程序包名称和你从哪里导航到这里的活动的包名称来检查它。

我们可以从Activity Stack中获取前一个活动的包名称。

ActivityManager am = (ActivityManager) context.getSystemService(Activity.ACTIVITY_SERVICE);

在这里你将获得你的包名,

String packageName = am.getRunningTasks(1).get(0).topActivity.getPackageName();

String className = am.getRunningTasks(1).get(0).topActivity.getClassName();

然后像这样获取您当前的包名

String currentpackage = getApplicationContext().getPackageName();

检查两个包是否相同

i.e

  if(packageName.equals(currentpackage))
       {
        Toast.makeText(context,"Same Application package",1).show();
       }

它在清单文件中使用了权限

<uses-permission android:name="android.permission.GET_TASKS" />

希望这能对你有所帮助


1
topActivity 总是来自当前包(如果不是服务等)。你有没有例子不是这种情况?即 top RunningTask(0).topActivity 给出的是当前活动,而不是上一个活动。 - Alexander Malakhov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接