2016-10-10 4 views
0

앱 보관함을 만들기 위해 Android에서 서비스를 구현하려고합니다.백그라운드 서비스가 제대로 작동하지 않습니다.

포어 그라운드에서 실행중인 활동을 확인하고 잠긴 경우 로커 활동으로 포워드하려고합니다.

서비스를 매니페스트에 추가했으나 전혀 작동하지 않습니다. 코드는 다음과 같습니다.

private static Timer timer = new Timer(); 
    public Boolean userAuth = false; 
    private Context mContext; 
    public String pActivity = ""; 

    public IBinder onBind(Intent arg0) { 
     return null; 
    } 

    public void onCreate() { 
     super.onCreate(); 
     mContext = this; 
     startService(); 
    } 

    private void startService() { 
     timer.scheduleAtFixedRate(new mainTask(), 0, 500); 
    } 

    private class mainTask extends TimerTask { 
     public void run() { 
      toastHandler.sendEmptyMessage(0); 
     } 
    } 

    public void onDestroy() { 
     super.onDestroy(); 
     Toast.makeText(this, "Service Stopped ...", Toast.LENGTH_SHORT).show(); 
    } 

    private final Handler toastHandler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      String activityOnTop; 

      ActivityManager manager = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE); 

      List<ActivityManager.RunningAppProcessInfo> tasks = manager.getRunningAppProcesses(); 
      //Getting the foreground activity name 
      activityOnTop=tasks.get(0).processName; 
      //Checking it against the app I need to lock 
      if (activityOnTop.equalsIgnoreCase("com.droiddigger.techmanik")) { 
       Intent lockIntent = new Intent(mContext, Lockscreen.class); 
       lockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       mContext.startActivity(lockIntent); 
      } else if(activityOnTop.equalsIgnoreCase("com.droiddigger.applocker")){ 

      }else{ 

      } 
     } 
    }; 
+0

전혀 작동하지 않는가? ....... – Opiatefuchs

+0

내가 잠그고 싶은 앱에 어떤 효과도 보이지 않는다. – Mufad

답변

0

해당 서비스를 시작해야합니다. 그것은 Activity 나 BroadcastReceiver에서 할 수 있습니다. 예를 들어

startService(new Intent(this, UpdaterServiceManager.class));

:

public class MyActivity extends Activity { 

    @Override 
    public void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     startService(new Intent(this, YourService.class)); 
     finish(); 
    } 

} 

편집 :

당신은 항상 작업라는 목록의 항목에 0을 검색하고 있습니다. SDK 설명서를 보면,이 목록 순서가 especified되지 않는다는 것을 말한다 : 에는 실행중인 프로세스는 (은 빈 목록을 반환하지 않습니다)가없는 경우 https://developer.android.com/reference/android/app/ActivityManager.html#getRunningAppProcesses()

가 RunningAppProcessInfo 기록의 목록을 돌려줍니다. 이 목록 주문은 지정되지 않습니다.

다른 방법으로 현재 보이는 활동을 얻어야합니다. 나는 AccessibilityService를 제안한다

+0

나는 전경을 가져 오는 데 문제가 있다고 생각한다. 액티비티 이름 'String activityOnTop; ActivityManager manager = (ActivityManager) mContext.getSystemService (Context.ACTIVITY_SERVICE); 목록 tasks = manager.getRunningAppProcesses(); // 전경 활동 이름 activityOnTop = tasks.get (0) .processName 얻기;' 항상 문자열 activityOnTop은은 AppLocker의 이름을 보여줍니다. – Mufad

+0

@Mufad는 대답의 편집을 참조하십시오 – BamsBamx

+0

좋습니다, 감사합니다! :) – Mufad

관련 문제