Android:如何限制特定应用

时间:2013-04-25 10:36:48

标签: android service

在我的应用中,我需要屏蔽短信,电子邮件和电话。我没有检测到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;
}
}

此代码正常运行但有以下问题:

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

我没有得到如何做到这一点。

1 个答案:

答案 0 :(得分:0)

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