Reputation: 81
I found some cool apps on play store.
These apps find every activities in my every installed apps.
When I click activity, it just run directly.
How could it possible?
Can we figure out any activities in any app?
and is it possible to run any activities by other app? even if that activity has no intent-filter in manifest file?
Screen shot - Quick shortcut maker
and I'd appreciate it if add some sample code.
Upvotes: 1
Views: 2194
Reputation: 3920
First get all ActivityInfo
of install activities in your device.
public List<ActivityInfo> getAllRunningActivities(Context context) {
List<ActivityInfo> result = new ArrayList<>();
List<ApplicationInfo> packages = context.getPackageManager()
.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo applicationInfo : packages) {
Log.d(TAG, "getAllRunningActivities: " + applicationInfo.packageName);
try {
PackageInfo pi = context.getPackageManager().getPackageInfo(
applicationInfo.packageName, PackageManager.GET_ACTIVITIES);
Collections.addAll(result, pi.activities);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}
}
return result;
}
Then startActivity()
by using that info.
for (ActivityInfo activityInfo : getAllRunningActivities(this)) {
Log.d(TAG, "onCreate: " + activityInfo.toString());
if (yourCondition && filterResult) {
Intent intent = new Intent();
intent.setClassName(activityInfo.applicationInfo.packageName, activityInfo.name);
startActivity(intent);
}
}
Upvotes: 1