android 打电话的包名,Android中获取当前运行包名的适配

android 有时需要获取当前运行的包名,做相应的操作

在android 5.0之前可以使用

String topApp

ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

List rti = mActivityManager.getRunningTasks(1);

topApp= rti.get(0).topActivity.getPackageName();

但是这个方法在android5.0 以后就废弃,防止应用获取更多的用户隐私

所以就需要添加废弃了如上方法 ,如果拥有系统权限则可以继续使用但是需要添加如下权限

否则需要申请相关权限

private boolean hasPermission() {

AppOpsManager appOps = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);

int mode = 0;

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {

mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS,

android.os.Process.myUid(), getPackageName());

}

return mode == AppOpsManager.MODE_ALLOWED;

}

通过如上方法判断应用是否有这个权限,没有就通过

startActivityForResult(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS),0x3000);

打开后在onActiivtyForResult里面进行相关监听

如果获取到权限后则可以通过如下方法进行获取当前运行的包名:

UsageStatsManager usm=(UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);

if (usm!=null){

long now=System.currentTimeMillis();

List uStats = usm.queryUsageStats(UsageStatsManager.INTERVAL_BEST, now - 60 * 1000, now);

if ((uStats!=null)&&(!uStats.isEmpty())){

int j = 0;

for (int i = 0; i < uStats.size(); i++) {

if (uStats.get(i).getLastTimeUsed() > uStats.get(j).getLastTimeUsed()) {

j = i;

}

}

topApp= uStats.get(j).getPackageName();

}

}

topApp 就是获取的当前运行的包名

二,在android 中时常需要悬浮窗的权限

在android6.0 之前可以直接使用windowManager addView的方式显示 ,但是到了android6.0 之后,android添加了动态权限申请机制 于是就有两种实现方法

方法一:在使用的地方申请相关权限

通过Settings.canDrawOverlays(context)方法判断悬浮窗权限是否打开

如果没有打开,则通过

startActivityForResult(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,Uri.parse("package:"+getPackageName())),0x1000);

进入设置页面,打开开关,然后在onActivityResult方法中监听,如果打开就做相应处理,否则提示用户

方法二:在windowManager 初始化时,设置 type为:WindowManager.LayoutParams.TYPE_TOAST

这样就可以避免申请权限,最优解决方案

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值