在我的应用中,我需要屏蔽短信,电子邮件和电话。我没有检测到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;
}
}
此代码正常运行但有以下问题:
它阻止所有应用,而我的要求是仅限制我列出的那些应用阻止。例如,如果我阻止手机和短信,我的活动应该只在点击拨号器和短信应用程序时打开,而不是在我点击地图时打开。
我没有得到如何做到这一点。
答案 0 :(得分:0)
当您检测到列入黑名单的应用程序时,您需要关闭正在运行的活动。后台服务/线程将最好地处理活动监视器。还有其他使用IActivityWatcher的内部方法,但内部接口和相关的隐藏API可能会被弃用。我相信它已经在JB中弃用了。