在这里我们只考虑5.0以上的系统,首先我们需要5.0的sdK,并且要申请权限,代码如下:


private String getTaskPackname() {          String currentApp = "CurrentNULL";          if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {              UsageStatsManager usm = (UsageStatsManager) this.getSystemService("usagestats");              long time = System.currentTimeMillis();              List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time);              if (appList != null && appList.size() > 0) {                  SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>();                  for (UsageStats usageStats : appList) {                      mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);                  }                  if (mySortedMap != null && !mySortedMap.isEmpty()) {                      currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName();                  }              }          } else {              ActivityManager am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);              List<ActivityManager.RunningAppProcessInfo> tasks = am.getRunningAppProcesses();              currentApp = tasks.get(0).processName;          }          Log.e("TAG", "Current App in foreground is: " + currentApp);          return currentApp;      }
如果没有申请权限,返回null,所以要加上
Intent intent = new Intent(                          Settings.ACTION_USAGE_ACCESS_SETTINGS);                  startActivity(intent);  
进到设置页面,加上这个权限。这样就能拿到包名。下面附上监控某些应用,若在前台,跳出禁止使用demo。代码如下:

package com.example.lockdemo;import java.util.List;import java.util.SortedMap;import java.util.TreeMap;import android.support.v7.app.ActionBarActivity;import android.support.v7.app.ActionBar;import android.support.v4.app.Fragment;import android.annotation.SuppressLint;import android.annotation.TargetApi;import android.app.ActivityManager;import android.app.usage.UsageStats;import android.app.usage.UsageStatsManager;import android.content.Context;import android.content.Intent;import android.content.pm.PackageManager;import android.content.pm.ResolveInfo;import android.os.Build;import android.os.Bundle;import android.os.Handler;import android.provider.Settings;import android.util.Log;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.Button;import android.widget.Toast;public class MainActivity extends ActionBarActivity {private Button button ;Handler  handler = new Handler(){public void handleMessage(android.os.Message msg) {//getTaskPackname();if("com.sina.weibo".equals(getTaskPackname())) {startActivity(new Intent(MainActivity.this,LockActivity.class));}handler.sendEmptyMessageDelayed(1, 500);};};    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        button = (Button)findViewById(R.id.button);        handler.sendEmptyMessageDelayed(1, 500);       //isNoSwitch();               button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubIntent intent = new Intent(                          Settings.ACTION_USAGE_ACCESS_SETTINGS);                  startActivity(intent);  }});                 }             @TargetApi(Build.VERSION_CODES.CUPCAKE) @SuppressLint("NewApi") private String getTaskPackname() {          String currentApp = "CurrentNULL";          if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {              UsageStatsManager usm = (UsageStatsManager) this.getSystemService("usagestats");              long time = System.currentTimeMillis();              List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time);              if (appList != null && appList.size() > 0) {                  SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>();                  for (UsageStats usageStats : appList) {                      mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);                  }                  if (mySortedMap != null && !mySortedMap.isEmpty()) {                      currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName();                  }              }          } else {              ActivityManager am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);              List<ActivityManager.RunningAppProcessInfo> tasks = am.getRunningAppProcesses();              currentApp = tasks.get(0).processName;          }          Log.e("TAG", "Current App in foreground is: " + currentApp);          return currentApp;      }        private boolean isNoOption() {          PackageManager packageManager = getApplicationContext()                  .getPackageManager();          Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);          List<ResolveInfo> list = packageManager.queryIntentActivities(intent,                  PackageManager.MATCH_DEFAULT_ONLY);          return list.size() > 0;      }      private boolean isNoSwitch() {          long ts = System.currentTimeMillis();          UsageStatsManager usageStatsManager = (UsageStatsManager) getApplicationContext()                  .getSystemService("usagestats");          List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(                  UsageStatsManager.INTERVAL_BEST, 0, ts);          if (queryUsageStats == null || queryUsageStats.isEmpty()) {              return false;           }          return true;      }     void showToast(String str)    {    Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG).show();    }}

一个死循环来监控栈顶应用,我这里设置的是微博,若发现栈顶是微博,跳出禁止使用页面;

package com.example.lockdemo;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.view.KeyEvent;public class LockActivity extends ActionBarActivity{@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.fragment_main);}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();finish();}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubif (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {Intent intent = new Intent(Intent.ACTION_MAIN);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.addCategory(Intent.CATEGORY_HOME);startActivity(intent);finish();}return super.onKeyDown(keyCode, event);}}

这里,xml不在附上。系统权限要加上:

 <uses-permission android:name="android.permission.GET_TASKS" />    <uses-permission xmlns:tools="http://schemas.android.com/tools"        android:name="android.permission.PACKAGE_USAGE_STATS"        tools:ignore="ProtectedPermissions" />
ok,搞定了。



更多相关文章

  1. Android系统权限那些事
  2. Android(安卓)8.1静态广播的使用以及添加权限
  3. Android4: Write Storage权限问题
  4. android 在应用中安装其他程序
  5. Android有哪些权限?Android开发权限集合
  6. Cocos2d-x开发移植到安卓平台横竖屏设置及相关
  7. android 排除 library 中的权限
  8. Android10的WIFI 名称读取为空解决
  9. 如何获得系统权限--解决no conscrypt_openjdk_jni in java.libra

随机推荐

  1. 安卓 jni 开发 —— Android(安卓)Studio
  2. eclipse安装ADT插件重启后不显示Android(
  3. Android(安卓)中SoftAP架构研究
  4. 杂乱之android的Gallery图像展示应用
  5. Android(安卓)Studio常用配置及使用技巧(
  6. 第八章 列表、菜单以及其它视图——上
  7. 【Android】Binder架构深度解析
  8. Android实现圆形、圆角和椭圆自定义图片V
  9. android Task(任务)的简单理解
  10. Android新建工程出错-Android+Packaging+