1

在我的应用程序中,我需要阻止短信、电子邮件和电话。我没有检测到incoming or outgoing calls or sms. 简单地说,我有一个服务将在后台运行并检查三个进程中的任何一个是否正在运行。如果它们正在运行,那么当用户单击拨号器或短信应用程序时,我的活动将打开。到目前为止,我已经尝试过,我在下面发布:

服务等级

public class DialerService extends Service {
ActivityManager am;
List<RunningAppProcessInfo> mAppProcessInfosList;
private Runnable myRunnable;
boolean threadDone = true;
Handler mHandler;
boolean isLockedAppRunning = false;

@Override
public IBinder onBind(Intent arg0) {
    return null;
}

public void onCreate() {
    am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    mAppProcessInfosList = new ArrayList<ActivityManager.RunningAppProcessInfo>();
    mHandler = new Handler();
    Log.v("Dialer Service", "onCreate called");
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    myRunnable = new Runnable() {

        @Override
        public void run() {
            isRestrictedAppRunning();
        }
    };

    new Thread(new Runnable() {
        public void run() {
            while (threadDone) {

                try {
                    mHandler.post(myRunnable);
                } catch (Exception e) {

                }
            }
        }
    }).start();
    return START_STICKY;
}

private void isRestrictedAppRunning() {
    mAppProcessInfosList = am.getRunningAppProcesses();
    for (int i = 0; i < mAppProcessInfosList.size(); i++) {
        if (mAppProcessInfosList.get(i).processName
                .equals("com.android.phone")
                || mAppProcessInfosList.get(i).processName
                        .equals("com.android.email")
                || mAppProcessInfosList.get(i).processName
                        .equals("com.android.mms")) {
            isLockedAppRunning = true;
            Intent dialogIntent = new Intent(getBaseContext(),
                    TestActivity.class);
            dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            getApplication().startActivity(dialogIntent);
        }
    }
}

@Override
public void onDestroy() {
    super.onDestroy();
    this.threadDone = false;
}
}

此代码正在运行,但存在以下问题:

它阻止了所有应用程序,而我的要求是仅限制我列出要阻止的那些应用程序。例如,如果我阻止电话和短信,我的活动应该只在点击拨号器和短信应用程序时打开,而不是在我点击地图时打开。

我不知道如何做到这一点。

4

1 回答 1

0

当您检测到您的黑名单应用程序即将启动时,您需要关闭正在运行的活动。后台服务/线程将最好地处理活动监视器。还有其他使用 IActivityWatcher 的内部方法,但内部接口和相关的隐藏 API 可能会被弃用。我相信它已经在 J​​B 中被弃用了。

于 2014-01-31T23:48:22.867 回答