2014-12-05 41 views
3

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

创建了一个小应用程序,实现应用程序成为SMS管理器所需的所有东西(按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); 
通过反射

,这里是我如何做它至今:

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(); 
    } 

而且我做了这个应用程序的系统,并把它放入文件夹/系统/私法,应用程序,重新启动手机,并与亚行成功启动,但磨片n我点击上面执行代码的按钮,没有任何反应。没有错误,没有日志输出,但默认的应用程序仍然是消息传递(com.android.mms)。

有没有办法做到这一点?

回答

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权限,你可以编辑这个文件。

相关问题