2013-04-25 92 views
1

在我的应用程序中,我需要阻止短信,电子邮件和电话。我没有检测到incoming or outgoing calls or sms。简单地说,我有一个服务将在后台运行,并检查是否有任何三个进程正在运行。如果他们正在运行,那么当用户点击拨号程序或短信应用程序时,我的活动将打开。到目前为止,我已经尽力了,我下面张贴:Android:如何限制特定的应用程序

服务类

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

堆栈溢出不是寻找开发人员合同工作的最佳位置。 – mah 2013-04-25 10:39:04

+0

@mah我也不是在这里为我的工作签署合同,只是讨论我遇到的问题,以便其他人可以发表他们的意见,并帮助我指出我错过的地方。 – Nitish 2013-04-25 10:49:25

+0

请阅读http://stackoverflow.com/faq上的堆栈溢出常见问题,并且请理解这不是讨论论坛。很明显,你不是在寻找聘请承包商,但是你的问题是(在我看来,其他人可能会不同意)在这里张贴深度。 – mah 2013-04-25 10:54:55

回答

0

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

相关问题