我想检测哪个应用目前正在打开,并根据Android应用执行一些操作。我的应用是否在后台运行。 如果您想对我投反对票,我表示感谢,但请在评论中提及您为什么这么做?
我可以在低于Lollipop的版本中获得它,但没有任何适用于高于Lollipop的工作源。
我正在使用 GET_TASKS 权限,但对于以上KitKat Android版本不推荐使用。
<uses-permission android:name="android.permission.GET_TASKS" />
如何获取当前在Android中打开的应用程序?
public class ApplicationReceiver extends BroadcastReceiver {
public final String TAG = "QnA_ApplicationReceiver";
int co = 0;
String[] messagnerPack;
@Override
public void onReceive(Context aContext, Intent anIntent) {
messagnerPack = aContext.getResources().getStringArray(R.array.smsAppPackage);
try {
ActivityManager am = (ActivityManager) aContext.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> alltasks = am.getRunningTasks(1);
Log.i("current task :", "CURRENT Activity ::" + alltasks.get(0).topActivity.getClassName());
for (ActivityManager.RunningTaskInfo aTask : alltasks) {
// Used to check for CALL screen
if (aTask.topActivity.getClassName().equals("com.android.phone.InCallScreen") || aTask.topActivity.getClassName().equals("com.truecaller.ui.TruecallerInit") || aTask.topActivity.getClassName().equals("com.android.contacts.DialtactsActivity") || aTask.topActivity.getClassName().contains("com.android.dialer")) {
// When user on call screen show a alert message
Toast.makeText(aContext, "Phone Call Screen.", Toast.LENGTH_LONG).show();
}
// Used to check for SMS screen
if (isSMSApp(aTask.topActivity.getClassName()) || isSMSApp(aTask.baseActivity.getClassName())) {
Toast.makeText(aContext, "SMS App is Active.", Toast.LENGTH_LONG).show();
}
// Used to check for CURRENT example main screen
String packageName = aContext.getPackageName();
if (aTask.topActivity.getClassName().equals(packageName + ".MainActivity")) {
// When opens this example screen then show a alert message
//Toast.makeText(aContext, "Running QnA.vbagetech.com Application.", Toast.LENGTH_LONG).show();
}
Log.i(TAG, "_________________________________");
Log.i(TAG, "aTask.baseActivity: " + aTask.baseActivity.flattenToShortString());
Log.i(TAG, "aTask.baseActivity: " + aTask.baseActivity.getClassName());
Log.i(TAG, "aTask.topActivity: " + aTask.topActivity.flattenToShortString());
Log.i(TAG, "aTask.topActivity: " + aTask.topActivity.getClassName());
Log.i(TAG, "_________________________________");
}
} catch (Throwable t) {
Log.i(TAG, "Throwable caught: " + t.getMessage(), t);
}
}
boolean isSMSApp(String pack) {
boolean found = false;
for (int i = 0; i < messagnerPack.length; i++) {
if (pack.indexOf(messagnerPack[i]) != -1 ? true : false) {
found = true;
break;
}
}
return found;
}
}
来自String.XML的应用程序数组
<string-array name="smsAppPackage">
<item>com.google.android.apps.messaging</item>
<item>com.android.mms</item>
<item>com.whatsapp</item>
<item>com.jb.gosms</item>
</string-array>
通过搜索,人们说您必须使用
<uses-permission
android:name="android.permission.REAL_GET_TASKS"
android:protectionLevel="signature" />
但是它给我错误对于上述版本,权限仅授予系统应用。
请帮助我如何解决以上版本的问题。
我的主MOTO已为用户禁用SMS应用。