2013-04-25 2 views
1

내 앱에서 SMS, 이메일 및 전화를 차단해야합니다. incoming or outgoing calls or sms을 (를) 감지하지 못했습니다. 간단히 말해, 백그라운드에서 실행되고 세 가지 프로세스 중 하나가 실행 중인지 확인하는 서비스가 있습니다. 그들이 실행중인 경우 사용자가 다이얼러 또는 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; 
} 
} 

이 코드는 작동하지만 문제 다음했습니다 반면,

그것은 블록의 모든 응용 프로그램을 내 요구 사항은 내가 차단 목록에 나열된 앱만 제한하는 것입니다. 예를 들어 휴대 전화 및 SMS를 차단하는 경우지도를 클릭 할 때가 아니라 다이얼러 및 SMS 앱 클릭만으로 내 활동을 열어야합니다.

나는 이것을하는 방법을 모르겠다.

+0

개발자는 계약을 맺기 위해 스택 오버플로를 찾는 것이 가장 좋은 곳이 아닙니다. – mah

+0

@ mah 그리고 나는 또한 내 일을 위해 계약서에 서명하고, 내가 직면 한 문제에 관해서 토론하고, 다른 사람들이 그들의 의견을 말할 수있게하고, 내가 놓친 곳을 지적하도록 도와 준다. – Nitish

+0

http://stackoverflow.com/faq에서 Stack Overflow FAQ를 읽어보십시오. 토론 포럼이 아니므로 이해해주십시오. 분명히 당신은 여기 계약자를 고용하려하지 않겠지 만, 귀하의 질문은 여기에 게시하기에 충분히 깊게 (제 의견으로는 다른 사람들이 동의하지 않을 수도 있습니다). – mah

답변

0

블랙리스트에 올라있는 앱이 올라 오는 것을 감지하면 실행중인 활동을 중단해야합니다. 백그라운드 서비스/스레드가 활동 모니터를 가장 잘 처리합니다. IActivityWatcher를 사용하는 다른 내부 메소드가 있지만 내부 인터페이스와 관련 숨겨진 API는 더 이상 사용되지 않습니다. 나는 그것이 JB에서 이미 비추천되었다고 생각한다.

관련 문제