2016-10-10 19 views
0

私はアプリロッカーを作るためにアンドロイドでサービスを実装しようとしています。バックグラウンドサービスが正しく動作していません

フォアグラウンドで実行されているアクティビティを確認しようとしています。ロックされている場合は、そのアクティビティをロッカーアクティビティに転送しています。

サービスをマニフェストに追加しましたが、サービスがまったく機能していません。 コードは

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

です。このサービスを開始する必要があります。これは、アクティビティまたはブロードキャスト受信者で行うことができます。例えば

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(); 
    } 

} 

EDIT:

あなたは常にタスクと呼ばれるリストの項目0を取得しています。 SDKのドキュメントを見ると、リストの順番がespecifiedされていないことを言われている。 なし実行中のプロセスは、(それが空のリストを返しません)が存在しない場合https://developer.android.com/reference/android/app/ActivityManager.html#getRunningAppProcesses()

がRunningAppProcessInfoレコードのリスト、またはnullを返します。 このリスト 注文は指定されていません。

現在の可視アクティビティは、他の方法で取得する必要があります。私は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

関連する問題