如何在屏幕上获取当前使用的应用程序名称?

时间:2018-07-19 13:34:47

标签: android

我想检测哪个应用目前正在打开,并根据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应用。

0 个答案:

没有答案