我们所知道的通常(在实践中任何)防病毒应用程序在卸载之前用于触发简单的对话框,例如:"你要卸载应用程序,你确定吗?" - "是/否".
是的,我知道我可以使用intent-filter拦截包删除意图,例如:
<activity
android:name=".UninstallIntentActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.DELETE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="package" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
但问题很简单,这会拦截任何删除请求,而且这会触发我的应用程序和库存安装程序之间的选择器对话框.因此,如果用户将选择库存安装程序 - 我将无法做任何事情.
我的目标不是阻止用户卸载我的应用程序,而只是回滚我的应用程序所做的更改.
从这些防病毒应用程序中学习我发现这种操作是可行的,所以请帮助我并解释它是如何可能的?
更新
由于有些人不相信它是真的 - 我会参考Avast移动安全:
Anti-Theft通过各种自我保护技术伪装其组件来保护自己免于卸载.
另一个例子:适用于Android的卡巴斯基互联网安全 - 这是卸载它的特殊程序,需要输入密码.
无论如何,这意味着有办法拦截卸载程序,以防止卸载或完成一些最终工作.
如果用户决定报告崩溃,Android的开发人员控制台具有报告运行时崩溃的功能.其他框架具有类似的功能,可在不涉及用户的情况下发送崩溃报告.
有谁知道报告失败的安装或升级的方法?使用android 5.0,我收到越来越多的安装失败的用户报告,但很难从我的应用程序的非技术用户获取日志.
使用WebView,某些网站需要很长时间才能完成页面加载(如在WebViewClient.onPageFinished()中),并且当发生这种情况时,这可以通过以下类型的Web控制台错误来表征:
E/Web Console(1916): Unsafe JavaScript attempt to access frame with URL
http://mobile.example.com from frame with URL
http://ad.doubleclick.net/adi/interactive.example.com/front_sub;sz=320x50;ord=7340930261983.
Domains, protocols and ports must match.
05-26 10:44:15.274: E/Web Console(1916): at null:1
Run Code Online (Sandbox Code Playgroud)
我希望能够捕获这些错误并以某种方式处理它们.例如,发出消息或与我的应用程序相关的任何内容,此时实际处理与核心问题无关:
有没有办法捕捉这些错误?即以某种方式可以通知我的应用程序?
注意:这不是一个Javascript问题.我不是在编程网站.我正在访问一个现有的网站,其实施是我无法控制的.这是一个WebView问题(目前在Android环境中,但也可能在其他能够托管WebView的环境中).
简短而简单的问题:
root设备可以在运行时为应用程序授予额外权限(我记得使用adb使用"grant permission"命令).这方面的一个例子是能够读取系统日志,这些日志从API16开始成为非用户权限(此处链接).
是否有这样的权限列表?
我想从其他应用程序中读取日志并过滤它们,以便在记录某个关键字时,我的应用程序将执行某项任务.
我找到了几种读取日志的方法,但从我的测试中我只能得到我的应用程序日志.
这是我最初尝试使用的方法
try {
Process process = Runtime.getRuntime().exec("logcat -d");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
StringBuilder log=new StringBuilder();
String line = "";
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
}
TextView tv = (TextView)findViewById(R.id.textView1);
tv.setText(log.toString());
}
catch (IOException e) {}
Run Code Online (Sandbox Code Playgroud)
但它似乎只读取我的应用程序的日志.
从某些 Android 版本(我认为是 2.3.x)开始,无论应用程序具有什么权限,您都无法通过 API 打开/关闭 GPS。过去,可以通过利用电源控制小部件中的错误(请参阅此处)来实现,但现在已修复。
假设我有 root 访问权限,如何打开和关闭 GPS?
编辑:这是您获得读取 jelly bean 日志的权限的方式,普通应用程序不再允许读取日志。我尝试对 WRITE_SECURE_SETTINGS 权限使用类似的解决方案来切换 gps ,但它没有用。
编辑:到目前为止,我只找到了一个有效的解决方案:将应用程序转换为系统应用程序(可以在此处找到一个有效的解决方案,即使在 android 4.2.1 上也可以使用)。但是,我想到的是使用 root 从一开始就绕过它,因为 root 权限可以根据我所知道的做任何事情。