是否可以在没有用户知识的情况下更改Android 4.4上的默认短信应用程序?我尝试使用反射和调用系统方法在ROOTED Galaxy S5上进行,所以这是我到目前为止所做的:
创建小应用程序,实现应用程序成为短信管理员所需的所有内容(根据http://android-developers.blogspot.in/2013/10/getting-your-sms-apps-ready-for-kitkat.html),我可以将其设为默认的短信应用程序,但Android要求我在对话框中确认。现在我正在探索android源代码,我在这个类中找到了一些东西:
所以我试图调用内部方法:
SmsApplication.setDefaultApplication(mNewSmsApplicationData.mPackageName, this);
通过反思,到目前为止我是这样做的:
Class[] params = new Class[2];
params[0]=String.class;
params[1]=Context.class;
Class cls = null;
try {
cls = Class.forName("com.android.internal.telephony.SmsApplication");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Method method = null;
try {
method = cls.getDeclaredMethod("getSmsApplicationData", params);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
try {
Object[] params2 = new Object[2];
params2[0]=getPackageName();
params2[1]=getApplicationContext();
Log.d("Current package", getPackageName());
method.invoke(null, params2);
} catch (InvocationTargetException e) {
e.printStackTrace();
}
我制作了这个应用程序系统应用程序并将其放入文件夹/ system / priv-app,重新启动手机并使用adb成功启动它,但是当我点击执行上面代码的按钮时,没有任何反应。没有错误,没有日志输出,但默认应用程序仍然是Messaging(com.android.mms)。
有没有办法做到这一点?
答案 0 :(得分:0)
此信息包含在文件/data/system/users/0/settings_secure.xml
中。例如,密钥sms_default_application
存储的SMS的默认应用程序。
<setting id="85" name="sms_default_application" value="com.google.android.talk" package="com.android.settings" />
您可以在此课程中找到更多信息:https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/provider/Settings.java#6067
因此,如果您拥有ROOT权限,则可以编辑此文件。