安卓BroadcastReceiver Kill 掉第三方app服务

安卓BroadcastReceiver Kill 掉第三方app服务

我用的是vivo y13l 的手机,不知道怎么了,我的应用商店和游戏中心总是偷偷的开启我的数据连接,虽然我的流量每个月都用不完,但是对于用宜搜看小说的我实在不能忍受,用过宜搜的人都知道在有网络连接的时候会弹出广告,每次我把流量关了,结果不到3秒钟就会自动开启了.找了很久的原因才发现是因为应用商店和游戏中心的服务总是自动启动.哪怕在设立里面kill掉也会几秒钟后开启.每次看小说的时候就会调整为飞行模式,特别的不方便..(之前我的手机都不会自动开启数据连接,用了一年半的样子就这样了,各种方法都试了,手机直接双清都没有用.)今天闲着没事,干脆写一个app来监听服务,只要那两个服务开启就kill掉.

  • 写一个广播来获取当前的移动网络状态是否开启.wifi我就没有管了
  • 再写一个服务来发送广播
  • Activity绑定服务,这样的话在我使用那两个app的时候可以关闭监听

MyReceiver广播

先写一个类来继承BroadcastReceiver,我是在设置里面找到了应用商店的包名,所以这里就只写了应用商店的服务.例如:

package com.chen.mob;

import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.widget.Toast;

public classMyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "发现应用商店自启动,正在kill中", Toast.LENGTH_SHORT).show();
        ConnectivityManager connectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);// 获取连接管理器
        NetworkInfo mobNetInfo = connectivityManager
                .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);// 获取移动数据连接
        ActivityManager manager = (ActivityManager) context
                .getSystemService(Context.ACTIVITY_SERVICE);// 获取当前开启的服务
        if (mobNetInfo.isConnected()) {// 判断是否连接
            for (RunningServiceInfo service : manager
                    .getRunningServices(Integer.MAX_VALUE)) {// 遍历
                //System.err.println(service.service.getClassName());//输出服务名称
                if("com.bbk.appstore.download.OpenDownloadService"
                        .equals(service.service.getClassName().toString())) {// 判断是否是应用商店的
                    manager.killBackgroundProcesses("com.bbk.appstore");// kill掉服务
                    Toast.makeText(context, "已kill掉应用商店,请手动关闭数据连接",
                            Toast.LENGTH_SHORT).show();

                }

            }
        }
    }

}

MyService服务

然后写一个类来继承Service,例如:

package com.chen.mob;

import android.annotation.SuppressLint;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;

public classMyService extends Service {
    private static boolean falg = true;//是否开启监听的标志
    private Handler handler;

    @Override
    public IBinder onBind(Intent intent) {

        return null;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        falg = false;//关闭为false
    }

    @SuppressLint("HandlerLeak")
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        falg = true;//开启为true
        new Thread(new Runnable() {//另外开一个线程
            @Override
            public void run() {
                while (falg) {
                    try {
                        Thread.sleep(5000);//休眠5秒
                        handler.sendEmptyMessage(0x101);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    if (falg) {//如果关闭中断循环
                        break;
                    }
                }

            }
        });

        handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (msg.what == 0x101) {
                    sendReceiver();//发送广播
                }
            }
        };

        return START_STICKY;
    }

    private void sendReceiver() {
        Intent in = new Intent();
        in.setAction("edu.jju.broadcastreceiver");
        sendBroadcast(in);// 发送普通广播
    }
}

Kill

最后写一个activity,例如:

package com.chen.mob;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.Toast;
import android.widget.ToggleButton;

public classKill extends Activity {

    private ToggleButton mTogBtn;//开启关闭设置

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTogBtn = (ToggleButton) findViewById(R.id.mTogBtn);//找ID
        mTogBtn.setOnCheckedChangeListener(new OnCheckedChangeListener() {//开启关闭监听

            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {
                if (isChecked) {
                    startService(new Intent(Kill.this, MyService.class));//开启绑定服务
                } else {
                    stopService(new Intent(Kill.this, MyService.class));//关闭解除绑定
                    Toast.makeText(Kill.this, "应用商店kill已关闭", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#f7f8f4"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/x40"
        android:layout_marginTop="@dimen/x10"
        android:background="#fff"
        android:orientation="horizontal" >

        <Button
            android:layout_width="wrap_content"
            android:layout_height="@dimen/x40"
            android:layout_weight="1"
            android:background="#fff"
            android:gravity="center_vertical"
            android:paddingLeft="@dimen/x8"
            android:text="@string/yy" />

        <ToggleButton
            android:id="@+id/mTogBtn"
            android:layout_width="wrap_content"
            android:layout_height="@dimen/x40"
            android:layout_gravity="center_horizontal"
            android:background="@android:color/transparent"
            android:button="@drawable/toggle_btn"
            android:checked="true"
            android:gravity="center_vertical"
            android:text=""
            android:textOff=""
            android:textOn="" />
    </LinearLayout>

</LinearLayout>

还有权限设置

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />

然后我把它安装在手机上面,启动监听,ok了,应用商店的服务被关闭了.我就可以安心的看小说了.妈妈再也不用担心我关机了

ps:不知道为什么我贴的代码会格式不对,我把public class 类名中间的空格删除就对了.希望能有大神告诉我是为什么哈.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值