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