2013-04-25 71 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中被棄用了。

相關問題