做一个简单的监控流量的悬浮窗

本文介绍了在Android9.0环境下,如何创建一个流量监控的悬浮窗。涉及到添加权限、在MainActivity中检查权限并启动服务、设计悬浮窗布局以及创建GetNetSpeedService服务。源代码可在GitHub找到。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发环境:Android9.0 API28 AS3.3.2

测试日期:2019年6月26日 19:22:58

—开始需要加入两种权限

AndroidManifest.xml

    <!-- 获取网速所需要的权限 -->
    <uses-permission
        android:name="android.permission.PACKAGE_USAGE_STATS"
        tools:ignore="ProtectedPermissions" /> 
    <!-- 悬浮窗所需要的权限 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
—之后在MainActivity里检查权限并开启服务
public class MainActivity extends AppCompatActivity {
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initFloatBall();    // 悬浮球模块
    }
    /**
     * 
     * @param context 传进来要从当前哪个活动开启服务
     */
    private void addWatchingService(Context context){
   
        Intent intent = new Intent(context,GetNetSpeedService.class);
        startService(intent);
    }

    /**
     * 初始化悬浮窗权限,允许应用出现在其他窗口之上
     */
    private void initFloatBall(){
   
        //检查权限是否开启
        if(Settings.canDrawOverlays(MainActivity.this)){
   
            addWatchingService(MainActivity.this);
            finish();
        }else{
   
            Toast.makeText(MainActivity.this,"请先打开权限",Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
            startActivityForResult(intent,1);
        }
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
   
        switch (requestCode){
   
            //判断回调情况
            case 1:
                if(!Settings.canDrawOverlays(MainActivity.this)){
   
                    Toast.makeText(MainActivity.this,"获取权限失败",Toast.LENGTH_SHORT);
                    finish();
                }else{
   
                    initFloatBall();
                }
        }
    }
}

—在layout文件下创建悬浮窗的布局floatball.xml

图片资源在源代码里找

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="80dp"
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值