java - Android 4.4 设置默认短信应用程序无需用户确认

标签 java android sms android-4.4-kitkat smsmanager

是否可以在用户不知情的情况下更改 Android 4.4 上的默认短信应用程序?我正在尝试使用反射和调用系统方法在 ROOTED Galaxy S5 上执行此操作,所以这是我到目前为止所做的:

创建的小应用程序实现了应用程序成为短信管理器所需的所有功能(根据 http://android-developers.blogspot.in/2013/10/getting-your-sms-apps-ready-for-kitkat.html ),我可以将其设为默认短信应用程序,但 Android 要求我在对话框中确认。现在我正在探索 android 源代码,我在这个类中发现了一些东西:

https://github.com/android/platform_packages_apps_settings/blob/2abbacb7d46657e5863eb2ef0035521ffc41a0a8/src/com/android/settings/SmsDefaultDialog.java

所以我正在尝试调用内部方法:

SmsApplication.setDefaultApplication(mNewSmsApplicationData.mPackageName, this);

通过反射(reflection),这是我目前的做法:

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)。

有什么办法吗?

最佳答案

此信息包含在文件 /data/system/users/0/settings_secure.xml 中。例如,通过 key 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权限,你可以编辑这个文件。

关于java - Android 4.4 设置默认短信应用程序无需用户确认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27312604/

相关文章:

java - @JsonSerialize/@JsonDeserialize 未使用 Spring MVC 调用

java - 为什么新线程立即操作UI时没有CalledFromWrongThreadException?

Android:content://sms/"type"值的文档?

从文件发送短信的Android应用程序?

Android 短信联系人姓名

java - XML 解析错误 - Hibernate

java - 如何修复 Fortify 竞争条件 : Singleton Member Field issue

java - AlertDialog在DialogFragment中不起作用

android - 设置新路径android

java - 在 Android 中从服务器加载大量图像