2015-11-25 198 views
0

我正在制作一个Android应用程序来锁定应用程序。如何在android中为锁定应用程序提供服务?

我选择了我要锁定的应用程序并将它们保存在SharedPreferences中,但我不知道如何制作该服务以检测将在移动设备上启动的每个应用程序,并将该软件包名称与软件包进行比较名称保存在SharedPreferences并显示我的锁定活动,而不是该应用程序。

这是我写在我的服务中的代码。

public class DetectorService extends Service { 

    @Override 
    public void onStart(Intent intent, int startId) { 
     // TODO Auto-generated method stub 
     super.onStart(intent, startId); 
     String foregroundTaskPackageName; 
     RunningTaskInfo foregroundTaskInfo; 
     try { 
      Thread.sleep(100); 
      ActivityManager am = (ActivityManager) getBaseContext().getSystemService(ACTIVITY_SERVICE); 
      foregroundTaskInfo = am.getRunningTasks(1).get(0); 
      foregroundTaskPackageName = foregroundTaskInfo.topActivity.getPackageName(); 
      PackageManager pm = getBaseContext().getPackageManager(); 

      } catch (InterruptedException e) { 
       Thread.currentThread().interrupt(); 
       return; 
      } 
     String[] abc = AppLockerPreference.getInstance(getApplicationContext()).getApplicationList(); 
     for(int i = 0 ; i < abc.length ; i++) 
     { 
      if(abc[i].equals(foregroundTaskInfo.topActivity.getPackageName().toString())) 
      { 
       Intent lockIntent = new Intent(getApplicationContext(), GalleryImages.class); 
       lockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       getApplicationContext().startActivity(lockIntent); 
      } 
     } 
    } 

    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

} 

这是我的代码,我选择的应用程序,并将它们保存在SharedPreferences。我正在启动此代码的服务方法。

public class AllAppsActivity extends ListActivity { 
    private PackageManager packageManager = null; 
    private List<ApplicationInfo> applist = null; 
    private ApplicationAdapter listadaptor = null; 
    AppLockerPreference ap; 
    String prefApps[]; 
    boolean[] appflag; 
    int[] arr; 
    int count = 0; 
    ImageView ivlock; 
    Button bloc; 
    ListView mylist; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ap = new AppLockerPreference(getApplicationContext()); 
     packageManager = getPackageManager(); 
     new LoadApplications().execute(); 
     mylist = getListView(); 

    } 

    @Override 
    protected void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 
    } 

    @Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 
     super.onPause(); 
     startService(new Intent(this, DetectorService.class)); 
     //Toast.makeText(AllAppsActivity.this, sc.getString("app_loc", ""), Toast.LENGTH_SHORT).show(); 

    } 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     super.onListItemClick(l, v, position, id); 
     ivlock = (ImageView) v.findViewById(R.id.app_lockimg); 
     if (ivlock.getDrawable() != null) { 
      ivlock.setImageDrawable(null); 
      appflag[position] = false; 

     } else { 
      ivlock.setImageResource(R.drawable.ic_action_secure); 
      appflag[position] = true; 
     } 
     for (int i = 0; i < appflag.length; ++i) { 
      if (appflag[i] == true) { 
       count++; 
      } 

     } 
     arr = new int[count]; 
     int a = 0; 
     for (int i = 0; i < appflag.length; ++i) { 
      if (appflag[i] == true) { 
       arr[a] = i; 
       a++; 
      } 
     } 
     String[] prefapps = new String[count]; 
     for (int i = 0; i < count; ++i) { 
      ApplicationInfo data = applist.get(arr[i]); 
      prefapps[i] = data.packageName.toString(); 
     } 
     ap.saveCount(count); 
     ap.saveApplicationList(prefapps); 
     ap.saveServiceEnabled(true); 
    } 

    private List<ApplicationInfo> checkForLaunchIntent(List<ApplicationInfo> list) { 
     ArrayList<ApplicationInfo> applist = new ArrayList<ApplicationInfo>(); 
     for (ApplicationInfo info : list) { 
      try { 
       if (null != packageManager.getLaunchIntentForPackage(info.packageName)) { 
        applist.add(info); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

     return applist; 
    } 

    private class LoadApplications extends AsyncTask<Void, Void, Void> { 
     private ProgressDialog progress = null; 

     @Override 
     protected Void doInBackground(Void... params) { 
      applist = checkForLaunchIntent(packageManager.getInstalledApplications(PackageManager.GET_META_DATA)); 
      listadaptor = new ApplicationAdapter(AllAppsActivity.this, R.layout.snippet_list_row, applist); 
      appflag = new boolean[listadaptor.getCount()]; 
      for (int i = 0; i < listadaptor.getCount(); i++) { 
       appflag[i] = false; 
      } 

      return null; 
     } 

     @Override 
     protected void onCancelled() { 
      super.onCancelled(); 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      setListAdapter(listadaptor); 
      progress.dismiss(); 
      super.onPostExecute(result); 
     } 

     @Override 
     protected void onPreExecute() { 
      progress = ProgressDialog.show(AllAppsActivity.this, null, "Loading application info..."); 
      super.onPreExecute(); 
     } 

     @Override 
     protected void onProgressUpdate(Void... values) { 
      super.onProgressUpdate(values); 
     } 
    } 

    public class ApplicationAdapter extends ArrayAdapter<ApplicationInfo> { 
     private List<ApplicationInfo> appsList = null; 
     private Context context; 
     private PackageManager packageManager; 

     public ApplicationAdapter(Context context, int textViewResourceId, List<ApplicationInfo> appsList) { 
      super(context, textViewResourceId, appsList); 
      this.context = context; 
      this.appsList = appsList; 
      packageManager = context.getPackageManager(); 
     } 

     @Override 
     public int getCount() { 
      return ((null != appsList) ? appsList.size() : 0); 
     } 

     @Override 
     public ApplicationInfo getItem(int position) { 
      return ((null != appsList) ? appsList.get(position) : null); 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View view = convertView; 
      if (null == view) { 
       LayoutInflater layoutInflater = (LayoutInflater) context 
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       view = layoutInflater.inflate(R.layout.snippet_list_row, null); 
      } 

      ApplicationInfo data = appsList.get(position); 
       TextView appName = (TextView) view.findViewById(R.id.app_name); 
       ImageView iconview = (ImageView) view.findViewById(R.id.app_icon); 
       ImageView lockimg = (ImageView) view.findViewById(R.id.app_lockimg); 
       String[] prefapps; 
       prefapps = ap.getApplicationList(); 
        //prefapps = new String[counter]; 
       boolean flag = false; 
       String label = (String) data.packageName; 
       for(int i=0;i<prefapps.length;++i) 
       { 
        if(prefapps[i].equals(label)) 
        { 
         flag = true; 
         //Toast.makeText(AllAppsActivity.this, ddd, Toast.LENGTH_SHORT).show(); 
        } 
       } 
       if(flag==true) 
       { 
        lockimg.setImageResource(R.drawable.ic_action_secure); 
        appflag[position]=true; 
        appName.setText(data.loadLabel(packageManager)); 
        iconview.setImageDrawable(data.loadIcon(packageManager)); 
       } 
       else 
       { 
        lockimg.setImageDrawable(null); 
        appflag[position] = false; 
        appName.setText(data.loadLabel(packageManager)); 
        iconview.setImageDrawable(data.loadIcon(packageManager)); 
       } 

      return view; 
     } 
    } 
} 

回答

0

我试了我自己,发现了一种方法来使服务。这是代码。

public class DetectorService extends Service { 

@SuppressWarnings("deprecation") 
@Override 
public void onStart(Intent intent, int startId) { 
    // TODO Auto-generated method stub 
    super.onStart(intent, startId); 

} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    // TODO Auto-generated method stub 
    final boolean running = true; 
    new Thread(new Runnable() 
    { 
     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      while(running){ 
      try { 
       Thread.sleep(500); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      ActivityManager mActivityManager = (ActivityManager) getSystemService(getApplicationContext().ACTIVITY_SERVICE); 
      List<ActivityManager.RunningTaskInfo> RunningTask = mActivityManager.getRunningTasks(1); 

      String[] prefs; 
      AppLockerPreference ap = new AppLockerPreference(getApplicationContext()); 
      prefs = ap.getApplicationList(); 
      for(int i = 0; i < prefs.length ; i++) 
      { 
       for(int j = 0; j< RunningTask.size() ; j++) 
       { 
        ActivityManager.RunningTaskInfo ar = RunningTask.get(j); 
        String activityOnTop=ar.topActivity.getPackageName(); 
        if(prefs[i].equals(activityOnTop)) 
        { 
         Intent lockIntent = new Intent(getApplicationContext(), GalleryImages.class); 
         lockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
         getApplicationContext().startActivity(lockIntent); 
        } 
       } 
      } 
      } 
     } 
    } 
    ).start(); 
    return super.onStartCommand(intent, flags, startId); 
} 

@Override 
public IBinder onBind(Intent arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 

}

相关问题