手机无线装置怎么开启提示 已自动为您开启秒装 一直给我自动下载360助手 咋办?

关于手机总是自动下载360手机助手_百度知道
关于手机总是自动下载360手机助手
关于手机总是自动下载360手机助手如题。手机下载任何东西
无论是用uc浏览器还是豌豆荚 酷安之类的应用市场 下什么都是360手机助手
下比如30mb的优酷 会只有5.6mb 就是360手机助手那么大 这该怎么办
我有更好的答案
若手机总有软件自动下载安装,多是第三方软件出现问题,建议:1.卸载最新下载的一些软件尝试。2.备份数据(联系人、短信、照片等),恢复出厂设定尝试。若问题依然存在,建议携带机器、购机发票、包修卡至当地的三星售后服务中心进行检测。
三星产品问答服务
主营:电子产品
用360清理大师,清理后就可以正常。
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。经验333 米
在线时间1 小时
版本6.5.26
积分 347, 距离下一级还需 153 积分
积分 347, 距离下一级还需 153 积分
机型未知设备
签到次数18
MIUI版本6.5.26
红米2增强版从4.4的MIUI7升到了5.1的MIUI8,明明已经授予它root权限了,,但是就是提示秒装开启失败,重装无解.难道还没对MIUI8做出适配么?
Screenshot_-13-24-51-530_com.qihoo.appstore.png (129.32 KB, 下载次数: 0)
分享到微信朋友圈
打开微信,点击底部的“发现”,使用 “扫一扫” 即可将网页分享到我的朋友圈。
经验29239 米
在线时间95 小时
版本7.10.23
机型未知设备
签到次数20
MIUI版本7.10.23
呃,已经这年代了还有些人对流氓念念不忘。
经验333 米
在线时间1 小时
版本6.5.26
积分 347, 距离下一级还需 153 积分
积分 347, 距离下一级还需 153 积分
机型未知设备
签到次数18
MIUI版本6.5.26
呃,已经这年代了还有些人对流氓念念不忘。
呵呵,只求好用
经验29239 米
在线时间95 小时
版本7.10.23
机型未知设备
签到次数20
MIUI版本7.10.23
呵呵,只求好用
经验14778 米
在线时间131 小时
版本8.4.26
机型红米Note 4
签到次数34
MIUI版本8.4.26
经验333 米
在线时间1 小时
版本6.5.26
积分 347, 距离下一级还需 153 积分
积分 347, 距离下一级还需 153 积分
机型未知设备
签到次数18
MIUI版本6.5.26
那你用啥?
百度手机助手?就一垃圾
应用宝?除了疼讯系,其他不怎么给力
就软件库数量而言,360手机助手还是很有优势的
经验29239 米
在线时间95 小时
版本7.10.23
机型未知设备
签到次数20
MIUI版本7.10.23
那你用啥?
百度手机助手?就一垃圾
应用宝?除了疼讯系,其他不怎么给力
这些东西都不要去用,它们都是很不要脸的,都是彻彻底底盈利为目的。
经验333 米
在线时间1 小时
版本6.5.26
积分 347, 距离下一级还需 153 积分
积分 347, 距离下一级还需 153 积分
机型未知设备
签到次数18
MIUI版本6.5.26
这些东西都不要去用,它们都是很不要脸的,都是彻彻底底盈利为目的。
我们获得服务,他们得到利益,这么很正常么?用它们主要是找软件方便,不用去浏览器到处搜,而且起码不会搜出病毒软件吧.
经验29239 米
在线时间95 小时
版本7.10.23
机型未知设备
签到次数20
MIUI版本7.10.23
我们获得服务,他们得到利益,这么很正常么?用它们主要是找软件方便,不用去浏览器到处搜,而且起码不会 ...
……继续耍流氓。
MIUI 10专属勋章
参加回帖活动
MIUI 9纪念勋章
为奥运加油勋章
为奥运加油勋章
2018新年勋章
参与回帖活动
2017圣诞节勋章
参与回帖活动
全局搜索纪念勋章
参加全局搜索内测
MIUI3亿用户纪念勋章
参与回帖活动
万圣节勋章
参加回帖活动
米兔月饼勋章
参加回帖活动
MIUI七夕鹊桥勋章
MIUI七周年
“澎湃S1 ”芯片纪念勋章
参与活动回帖可得
参与红米Note 4X活动
2017年小金鸡勋章
回复2016年度评选活动贴
圣诞节勋章
参与圣诞活动
小火箭勋章
神舟11号 话题活动
MIUI 300周
MIUI 300周更新纪念勋章
已关注极客秀微信
已关注微信
关注新浪微博
已关注新浪微博
MIUI六周年
MIUI六周年纪念勋章
Copyright (C) 2017 MIUI
京ICP备号 | 京公网安备34号 | 京ICP证110507号手机360助手关闭
如何彻底删除它吧 1、首先我们打开360安全卫士,相信你的电脑保护就靠他了吧,360助手其实也暗藏在里面 2、我们找到360右上角的一个向下箭头并点击,在出现的下拉菜单中我们选择“设置”选项。3、在弹出的窗口基本设置-功能定制里的 主要功能框里,我们看到开启手机助手选项,如果这里勾选的话,就证明您安装了360手机助手...
360手机小胖怎么关掉 360手机助手小人退出方法 如果不想看到手机小胖的话,右击这个卡通“手机小胖”,断开连接,或者是不再显示悬浮框,就可以了。不过手机小胖是不能卸载的,只能将其关闭哦~
怎么关闭360手机助手呢?下面,就让小编来告诉大家吧!启动360安全卫士!选择菜单栏的手机助手进入!手机助手 点击手机助手页面用户名右侧的小箭头调出菜单,在菜单栏位选择“设置”。设置 在“悬浮窗”选项页面将“连接手机后自动显示悬浮窗”选项卡的复选框勾去掉!悬浮窗 在”其它设置“选项页面将“开机自动无线连接...
软件下载:360手机助手 PC版 独立版 V2.3.0.1016 中文官方安装版 A:当用户的手机连接电脑时,右下角会出现气泡提示,气泡提示默认状态下是自动开启的,如果您想关闭,...在360(91)手机助手主界面的右上角选择设置,然后选择常规设置,将气泡提醒设置里的“设置连接时气泡提醒”的勾选去掉,即可关闭气泡提醒,如下图所示:
下满本篇教程将教你通过360安全卫士关闭360U盘小助手功能。1、打开360安全卫士,电脑体检功能下选择界面右侧的功能大全,点击进入管理,如下图所示:2、选择功能大全中的360保镖。3、在360包保镖中,进入U盘保镖功能,随后关闭界面上的两项功能。4、系统提示是否关闭,选择是即可。这样360u盘小助手便成功被关闭了。当然...
在使用360手机助手的时候发现一个问题,不知道大家有木有碰到过,就是在连接电脑的时候,界面会自动跳出一个气泡,让我很难下载软件,也不知道该如何解决 ...方法二:在360手机助手主界面的右上角选择设置,然后选择常规设置,将气泡提醒设置里的“设置连接时气泡提醒”的勾选去掉,即可关闭气泡提醒,如下图所示:
那么,360手机小胖怎么关闭?小编将在下文演示360手机小胖关闭小技巧,希望能对大家有所帮助。360手机小胖关闭小技巧 如果不想看到手机小胖的话,右击这个卡通“手机小胖”,断开连接,或者是不再显示悬浮框,就可以了。不过手机小胖是不能卸载的,只能将其关闭哦~如果真的想卸载,就直接卸载360就可以了!
2)关闭360手机卫士悬浮窗(安仔) 点击悬浮窗(或者安仔),将界面往下拖,可以看到“浮窗设置”按钮,点击后在“设置”中,将“开启悬浮窗”按钮置到“已关闭”就可以了。3)打开360手机卫士悬浮窗 点击“360手机卫士”图标,打开主界面,点击界面右侧的“设置”图标,在点击“悬浮窗设置”,就进入了之前关闭悬浮窗那个界面,...
360手机小胖怎么关?小编带来了360手机小胖关闭方法,手机小胖是360手机助手的一个卡通形象,可以帮助我们管理手机,那么该如何将其关闭呢?请看下文介绍吧。如果不想看到手机小胖的话,右击这个卡通“手机小胖”,断开连接,或者是不再显示悬浮框,就可以了。
手机下360手机助手 安装好后打开意外停止进程解决办法:1.重启手机,然后再重新启动360手机助手;2.如果重启之后,仍然出现意外停止进程的情况,建议清理一下手机的内存,卸载一些不常有软件,然后安装一个安全软件,使用安全软件的一键加速,然后再尝试打开。每当你在感叹,如果有这样一个东西就好了的时候,请注意,其实这是你的机会...
Android静默安装实现方案,仿360手机助手秒装和智能安装功能
转载请注明出处:之前有很多朋友都问过我,在Android系统中怎样才能实现静默安装呢?所谓的静默安装,就是不用弹出系统的安装界面,在不影响用户任何操作的情况下不知不觉地将程序装好。虽说这种方式看上去不打搅用户,但是却存在着一个问题,因为Android系统会在安装界面当中把程序所声明的权限展示给用户看,用户来评估一下这些权限然后决定是否要安装该程序,但如果使用了静默安装的方式,也就没有地方让用户看权限了,相当于用户被动接受了这些权限。在Android官方看来,这显示是一种非常危险的行为,因此静默安装这一行为系统是不会开放给开发者的。但是总是弹出一个安装对话框确实是一种体验比较差的行为,这一点Google自己也意识到了,因此Android系统对自家的Google Play商店开放了静默安装权限,也就是说所有从Google Play上下载的应用都可以不用弹出安装对话框了。这一点充分说明了拥有权限的重要性,自家的系统想怎么改就怎么改。借鉴Google的做法,很多国内的手机厂商也采用了类似的处理方式,比如说小米手机在小米商店中下载应用也是不需要弹出安装对话框的,因为小米可以在MIUI中对Android系统进行各种定制。因此,如果我们只是做一个普通的应用,其实不太需要考虑静默安装这个功能,因为我们只需要将应用上架到相应的商店当中,就会自动拥有静默安装的功能。但是如果我们想要做的也是一个类似于商店的平台呢?比如说像360手机助手,它广泛安装于各种各样的手机上,但都是作为一个普通的应用存在的,而没有Google或小米这样的特殊权限,那360手机助手应该怎样做到更好的安装体验呢?为此360手机助手提供了两种方案, 秒装(需ROOT权限)和智能安装,如下图示:因此,今天我们就模仿一下360手机助手的实现方式,来给大家提供一套静默安装的解决方案。一、秒装所谓的秒装其实就是需要ROOT权限的静默安装,其实静默安装的原理很简单,就是调用Android系统的pm install命令就可以了,但关键的问题就在于,pm命令系统是不授予我们权限调用的,因此只能在拥有ROOT权限的手机上去申请权限才行。下面我们开始动手,新建一个InstallTest项目,然后创建一个SilentInstall类作为静默安装功能的实现类,代码如下所示:/**
* 静默安装的实现类,调用install()方法执行具体的静默安装逻辑。
* 原文地址:http://blog.csdn.net/guolin_blog/article/details/
* @author guolin
public class SilentInstall {
* 执行具体的静默安装逻辑,需要手机ROOT。
* @param apkPath
要安装的apk文件的路径
* @return 安装成功返回true,安装失败返回false。
public boolean install(String apkPath) {
boolean result =
DataOutputStream dataOutputStream =
BufferedReader errorStream =
// 申请su权限
Process process = Runtime.getRuntime().exec("su");
dataOutputStream = new DataOutputStream(process.getOutputStream());
// 执行pm install命令
String command = "pm install -r " + apkPath + "\n";
dataOutputStream.write(command.getBytes(Charset.forName("utf-8")));
dataOutputStream.flush();
dataOutputStream.writeBytes("exit\n");
dataOutputStream.flush();
process.waitFor();
errorStream = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String msg = "";
// 读取命令的执行结果
while ((line = errorStream.readLine()) != null) {
Log.d("TAG", "install msg is " + msg);
// 如果执行结果中包含Failure字样就认为是安装失败,否则就认为安装成功
if (!msg.contains("Failure")) {
} catch (Exception e) {
Log.e("TAG", e.getMessage(), e);
} finally {
if (dataOutputStream != null) {
dataOutputStream.close();
if (errorStream != null) {
errorStream.close();
} catch (IOException e) {
Log.e("TAG", e.getMessage(), e);
}可以看到,SilentInstall类中只有一个install()方法,所有静默安装的逻辑都在这个方法中了,那么我们具体来看一下这个方法。首先在第21行调用了Runtime.getRuntime().exec("su")方法,在这里先申请ROOT权限,不然的话后面的操作都将失败。然后在第24行开始组装静默安装命令,命令的格式就是pm install -r &apk路径&,-r参数表示如果要安装的apk已经存在了就覆盖安装的意思,apk路径是作为方法参数传入的。接下来的几行就是执行上述命令的过程,注意安装这个过程是同步的,因此我们在下面调用了process.waitFor()方法,即安装要多久,我们就要在这里等多久。等待结束之后说明安装过程结束了,接下来我们要去读取安装的结果并进行解析,解析的逻辑也很简单,如果安装结果中包含Failure字样就说明安装失败,反之则说明安装成功。整个方法还是非常简单易懂的,下面我们就来搭建调用这个方法的环境。修改activity_main.xml中的代码,如下所示:&?xml version="1.0" encoding="utf-8"?&
&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:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.installtest.MainActivity"&
&LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onChooseApkFile"
android:text="选择安装包" /&
android:id="@+id/apkPathText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"
&/LinearLayout&
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray" /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onSilentInstall"
android:text="秒装" /&
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray" /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onForwardToAccessibility"
android:text="开启智能安装服务" /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onSmartInstall"
android:text="智能安装" /&
&/LinearLayout&这里我们先将程序的主界面确定好,主界面上拥有四个按钮,第一个按钮用于选择apk文件的,第二个按钮用于开始秒装,第三个按钮用于开启智能安装服务,第四个按钮用于开始智能安装,这里我们暂时只能用到前两个按钮。那么调用SilentInstall的install()方法需要传入apk路径,因此我们需要先把文件选择器的功能实现好,新建activity_file_explorer.xml和list_item.xml作为文件选择器的布局文件,代码分别如下所示:&?xml version="1.0" encoding="utf-8"?&
&LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"&
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
&/LinearLayout&&?xml version="1.0" encoding="utf-8"?&
&LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="4dp"
android:orientation="horizontal"&
&ImageView android:id="@+id/img"
android:layout_width="32dp"
android:layout_margin="4dp"
android:layout_gravity="center_vertical"
android:layout_height="32dp"/&
&TextView android:id="@+id/name"
android:textSize="18sp"
android:textStyle="bold"
android:layout_width="match_parent"
android:gravity="center_vertical"
android:layout_height="50dp"/&
&/LinearLayout&然后新建FileExplorerActivity作为文件选择器的Activity,代码如下:public class FileExplorerActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
ListView listV
String rootPath = Environment.getExternalStorageDirectory().getPath();
String currentPath = rootP
List&Map&String, Object&& list = new ArrayList&&();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file_explorer);
listView = (ListView) findViewById(R.id.list_view);
adapter = new SimpleAdapter(this, list, R.layout.list_item,
new String[]{"name", "img"}, new int[]{R.id.name, R.id.img});
listView.setAdapter(adapter);
listView.setOnItemClickListener(this);
refreshListItems(currentPath);
private void refreshListItems(String path) {
setTitle(path);
File[] files = new File(path).listFiles();
list.clear();
if (files != null) {
for (File file : files) {
Map&String, Object& map = new HashMap&&();
if (file.isDirectory()) {
map.put("img", R.drawable.directory);
map.put("img", R.drawable.file_doc);
map.put("name", file.getName());
map.put("currentPath", file.getPath());
list.add(map);
adapter.notifyDataSetChanged();
public void onItemClick(AdapterView&?& parent, View v, int position, long id) {
currentPath = (String) list.get(position).get("currentPath");
File file = new File(currentPath);
if (file.isDirectory())
refreshListItems(currentPath);
Intent intent = new Intent();
intent.putExtra("apk_path", file.getPath());
setResult(RESULT_OK, intent);
public void onBackPressed() {
if (rootPath.equals(currentPath)) {
super.onBackPressed();
File file = new File(currentPath);
currentPath = file.getParentFile().getPath();
refreshListItems(currentPath);
}这部分代码由于和我们本篇文件的主旨没什么关系,主要是为了方便demo展示的,因此我就不进行讲解了。接下来修改MainActivity中的代码,如下所示:/**
* 仿360手机助手秒装和智能安装功能的主Activity。
* 原文地址:http://blog.csdn.net/guolin_blog/article/details/
* @author guolin
public class MainActivity extends AppCompatActivity {
TextView apkPathT
String apkP
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
apkPathText = (TextView) findViewById(R.id.apkPathText);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 0 && resultCode == RESULT_OK) {
apkPath = data.getStringExtra("apk_path");
apkPathText.setText(apkPath);
public void onChooseApkFile(View view) {
Intent intent = new Intent(this, FileExplorerActivity.class);
startActivityForResult(intent, 0);
public void onSilentInstall(View view) {
if (!isRoot()) {
Toast.makeText(this, "没有ROOT权限,不能使用秒装", Toast.LENGTH_SHORT).show();
if (TextUtils.isEmpty(apkPath)) {
Toast.makeText(this, "请选择安装包!", Toast.LENGTH_SHORT).show();
final Button button = (Button)
button.setText("安装中");
new Thread(new Runnable() {
public void run() {
SilentInstall installHelper = new SilentInstall();
final boolean result = installHelper.install(apkPath);
runOnUiThread(new Runnable() {
public void run() {
if (result) {
Toast.makeText(MainActivity.this, "安装成功!", Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this, "安装失败!", Toast.LENGTH_SHORT).show();
button.setText("秒装");
}).start();
public void onForwardToAccessibility(View view) {
public void onSmartInstall(View view) {
* 判断手机是否拥有Root权限。
* @return 有root权限返回true,否则返回false。
public boolean isRoot() {
boolean bool =
bool = new File("/system/bin/su").exists() || new File("/system/xbin/su").exists();
} catch (Exception e) {
e.printStackTrace();
}可以看到,在MainActivity中,我们对四个按钮点击事件的回调方法都进行了定义,当点击选择安装包按钮时就会调用onChooseApkFile()方法,当点击秒装按钮时就会调用onSilentInstall()方法。在onChooseApkFile()方法方法中,我们通过Intent打开了FileExplorerActivity,然后在onActivityResult()方法当中读取选择的apk文件路径。在onSilentInstall()方法当中,先判断设备是否ROOT,如果没有ROOT就直接return,然后判断安装包是否已选择,如果没有也直接return。接下来我们开启了一个线程来调用SilentInstall.install()方法,因为安装过程会比较耗时,如果不开线程的话主线程就会被卡住,不管安装成功还是失败,最后都会使用Toast来进行提示。代码就这么多,最后我们来配置一下AndroidManifest.xml文件:&?xml version="1.0" encoding="utf-8"?&
&manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.installtest"&
&uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /&
&application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"&
&activity android:name=".MainActivity"&
&intent-filter&
&action android:name="android.intent.action.MAIN" /&
&category android:name="android.intent.category.LAUNCHER" /&
&/intent-filter&
&/activity&
&activity android:name=".FileExplorerActivity"/&
&/application&
&/manifest&并没有什么特殊的地方,由于选择apk文件需要读取SD卡,因此在AndroidManifest.xml文件中要记得声明读SD卡权限。另外还有一点需要注意,在Android 6.0系统中,读写SD卡权限被列为了危险权限,因此如果将程序的targetSdkVersion指定成了23则需要做专门的6.0适配,这里简单起见,我把targetSdkVersion指定成了22,因为6.0的适配工作也不在文章的讲解范围之内。现在运行程序,就可以来试一试秒装功能了,切记手机一定要ROOT,效果如下图所示:可以看到,这里我们选择的网易新闻安装包已成功安装到手机上了,并且没有弹出系统的安装界面,由此证明秒装功能已经成功实现了。二、智能安装那么对于ROOT过的手机,秒装功能确实可以避免弹出系统安装界面,在不影响用户操作的情况下实现静默安装,但是对于绝大部分没有ROOT的手机,这个功能是不可用的。那么我们应该怎么办呢?为此360手机助手提供了一种折中方案,就是借助Android提供的无障碍服务来实现智能安装。所谓的智能安装其实并不是真正意义上的静默安装,因为它还是要弹出系统安装界面的,只不过可以在安装界面当中释放用户的操作,由智能安装功能来模拟用户点击,安装完成之后自动关闭界面。这个功能是需要用户手动开启的,并且只支持Android 4.1之后的手机,如下图所示:好的,那么接下来我们就模仿一下360手机助手,来实现类似的智能安装功能。智能安装功能的实现原理要借助Android提供的无障碍服务,关于无障碍服务的详细讲解可参考官方文档:。首先在res/xml目录下新建一个accessibility_service_config.xml文件,代码如下所示:&accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:packageNames="com.android.packageinstaller"
android:description="@string/accessibility_service_description"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFlags="flagDefault"
android:accessibilityFeedbackType="feedbackGeneric"
android:canRetrieveWindowContent="true"
/&其中,packageNames指定我们要监听哪个应用程序下的窗口活动,这里写com.android.packageinstaller表示监听Android系统的安装界面。description指定在无障碍服务当中显示给用户看的说明信息,上图中360手机助手的一大段内容就是在这里指定的。accessibilityEventTypes指定我们在监听窗口中可以模拟哪些事件,这里写typeAllMask表示所有的事件都能模拟。accessibilityFlags可以指定无障碍服务的一些附加参数,这里我们传默认值flagDefault就行。accessibilityFeedbackType指定无障碍服务的反馈方式,实际上无障碍服务这个功能是Android提供给一些残疾人士使用的,比如说盲人不方便使用手机,就可以借助无障碍服务配合语音反馈来操作手机,而我们其实是不需要反馈的,因此随便传一个值就可以,这里传入feedbackGeneric。最后canRetrieveWindowContent指定是否允许我们的程序读取窗口中的节点和内容,必须写true。记得在string.xml文件中写一下description中指定的内容,如下所示:&resources&
&string name="app_name"&InstallTest&/string&
&string name="accessibility_service_description"&智能安装服务,无需用户的任何操作就可以自动安装程序。&/string&
&/resources&
接下来修改AndroidManifest.xml文件,在里面配置无障碍服务:&?xml version="1.0" encoding="utf-8"?&
&manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.installtest"&
&uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /&
&application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"&
android:name=".MyAccessibilityService"
android:label="我的智能安装"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"&
&intent-filter&
&action android:name="android.accessibilityservice.AccessibilityService" /&
&/intent-filter&
&meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibility_service_config" /&
&/service&
&/application&
&/manifest&
这部分配置的内容多数是固定的,必须要声明一个android.permission.BIND_ACCESSIBILITY_SERVICE的权限,且必须要有一个值为android.accessibilityservice.AccessibilityService的action,然后我们通过&meta-data&将刚才创建的配置文件指定进去。接下来就是要去实现智能安装功能的具体逻辑了,创建一个MyAccessibilityService类并继承自AccessibilityService,代码如下所示:/**
* 智能安装功能的实现类。
* 原文地址:http://blog.csdn.net/guolin_blog/article/details/
* @author guolin
public class MyAccessibilityService extends AccessibilityService {
Map&Integer, Boolean& handledMap = new HashMap&&();
public MyAccessibilityService() {
public void onAccessibilityEvent(AccessibilityEvent event) {
AccessibilityNodeInfo nodeInfo = event.getSource();
if (nodeInfo != null) {
int eventType = event.getEventType();
if (eventType== AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED ||
eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
if (handledMap.get(event.getWindowId()) == null) {
boolean handled = iterateNodesAndHandle(nodeInfo);
if (handled) {
handledMap.put(event.getWindowId(), true);
private boolean iterateNodesAndHandle(AccessibilityNodeInfo nodeInfo) {
if (nodeInfo != null) {
int childCount = nodeInfo.getChildCount();
if ("android.widget.Button".equals(nodeInfo.getClassName())) {
String nodeContent = nodeInfo.getText().toString();
Log.d("TAG", "content is " + nodeContent);
if ("安装".equals(nodeContent)
|| "完成".equals(nodeContent)
|| "确定".equals(nodeContent)) {
nodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);
} else if ("android.widget.ScrollView".equals(nodeInfo.getClassName())) {
nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
for (int i = 0; i & childC i++) {
AccessibilityNodeInfo childNodeInfo = nodeInfo.getChild(i);
if (iterateNodesAndHandle(childNodeInfo)) {
public void onInterrupt() {
代码并不复杂,我们来解析一下。每当窗口有活动时,就会有消息回调到onAccessibilityEvent()方法中,因此所有的逻辑都是从这里开始的。首先我们可以通过传入的AccessibilityEvent参数来获取当前事件的类型,事件的种类非常多,但是我们只需要监听TYPE_WINDOW_CONTENT_CHANGED和TYPE_WINDOW_STATE_CHANGED这两种事件就可以了,因为在整个安装过程中,这两个事件必定有一个会被触发。当然也有两个同时都被触发的可能,那么为了防止二次处理的情况,这里我们使用了一个Map来过滤掉重复事件。接下来就是调用iterateNodesAndHandle()方法来去解析当前界面的节点了,这里我们通过递归的方式将安装界面中所有的子节点全部进行遍历,当发现按钮节点的时候就进行判断,按钮上的文字是不是“安装”、“完成”、“确定”这几种类型,如果是的话就模拟一下点击事件,这样也就相当于帮用户自动操作了这些按钮。另外从Android 4.4系统开始,用户需要将应用申请的所有权限看完才可以点击安装,因此如果我们在节点中发现了ScrollView,那就模拟一下滑动事件,将界面滑动到最底部,这样安装按钮就可以点击了。最后,回到MainActivity中,来增加对智能安装功能的调用,如下所示:/**
* 仿360手机助手秒装和智能安装功能的主Activity。
* 原文地址:http://blog.csdn.net/guolin_blog/article/details/
* @author guolin
public class MainActivity extends AppCompatActivity {
public void onForwardToAccessibility(View view) {
Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
startActivity(intent);
public void onSmartInstall(View view) {
if (TextUtils.isEmpty(apkPath)) {
Toast.makeText(this, "请选择安装包!", Toast.LENGTH_SHORT).show();
Uri uri = Uri.fromFile(new File(apkPath));
Intent localIntent = new Intent(Intent.ACTION_VIEW);
localIntent.setDataAndType(uri, "application/vnd.android.package-archive");
startActivity(localIntent);
}当点击了开启智能安装服务按钮时,我们通过Intent跳转到系统的无障碍服务界面,在这里启动智能安装服务。当点击了智能安装按钮时,我们通过Intent跳转到系统的安装界面,之后所有的安装操作都会自动完成了。现在可以重新运行一下程序,效果如下图所示:可以看到,当打开网易新闻的安装界面之后,我们不需要进行任何的手动操作,界面的滑动、安装按钮、完成按钮的点击都是自动完成的,最终会自动回到手机原来的界面状态,这就是仿照360手机助手实现的智能安装功能。好的,本篇文章的所有内容就到这里了,虽说不能说完全实现静默安装,但是我们已经在权限允许的范围内尽可能地去完成了,并且360手机助手也只能实现到这一步而已,那些被产品经理逼着去实现静默安装的程序员们也有理由交差了吧?关注我的技术公众号,每天都有优质技术文章推送。关注我的娱乐公众号,工作、学习累了的时候放松一下自己。
微信扫一扫下方二维码即可关注:
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 手机中毒提示安装软件 的文章

 

随机推荐