2012-01-11 90 views
1

给定帐户类型和帐户名称,是否有显示帐户首选项屏幕的方法?这是带有删除和同步按钮的屏幕。显示特定帐户的帐户设置

注意:我不想显示可以使用ACTION_SYNC_SETTINGS完成的帐户列表。

回答

2

我一直在努力做到这一点,我可以变得非常接近!但我怀疑这个行为实际上是不允许的。我们可以启动帐户首选项屏幕,但随后会出现强制关闭通知的错误消息。

我们只需要启动以下意图推出针对特定帐户的设置:

Intent i = new Intent(Intent.ACTION_MAIN); 
ComponentName cn = new ComponentName("com.android.settings", "com.android.settings.SubSettings"); 
i.setComponent(cn); 

基本上,当ActivityManager开始活动,通过手动点击账户,其目的是:

01-17 11:28:39.738: I/ActivityManager(72): START {act=android.intent.action.MAIN cmp=com.android.settings/.SubSettings (has extras)} from pid 708 

比较这与我们的方法发送的意图:

01-17 11:23:39.740: D/SetupSync(1359): Intent { act=android.intent.action.MAIN cmp=com.android.settings/.SubSettings } 

然而,这里的警告:那么Android的显示强制关闭通知的,我们可以在日志中看到:

01-17 11:23:39.767: E/AndroidRuntime(1359): Caused by: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cmp=com.android.settings/.SubSettings } from ProcessRecord{415415b8 1359:org.mozilla.gecko/10044} (pid=1359, uid=10044) not exported from uid 1000 
01-17 11:23:39.767: E/AndroidRuntime(1359):  at android.os.Parcel.readException(Parcel.java:1327) 
01-17 11:23:39.767: E/AndroidRuntime(1359):  at android.os.Parcel.readException(Parcel.java:1281) 
01-17 11:23:39.767: E/AndroidRuntime(1359):  at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1624) 
01-17 11:23:39.767: E/AndroidRuntime(1359):  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379) 
01-17 11:23:39.767: E/AndroidRuntime(1359):  at android.app.Activity.startActivityForResult(Activity.java:3190) 
01-17 11:23:39.767: E/AndroidRuntime(1359):  at android.app.Activity.startActivity(Activity.java:3297) 
01-17 11:23:39.767: E/AndroidRuntime(1359):  at org.mozilla.gecko.sync.setup.activities.SetupSyncActivity.onResume(SetupSyncActivity.java:148) 
01-17 11:23:39.767: E/AndroidRuntime(1359):  at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1154) 
01-17 11:23:39.767: E/AndroidRuntime(1359):  at android.app.Activity.performResume(Activity.java:4539) 
01-17 11:23:39.767: E/AndroidRuntime(1359):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2433) 
01-17 11:23:39.767: E/AndroidRuntime(1359):  ... 12 more 

所以,你可以做的是试图/捕捉RuntimeException的,所以它不会弹出。似乎有点粗略,但如果你想一劈,好了,这达到了期望的结果...

TL; DR: 我们可以启动设置特定帐户,但随后的吓人对不起,这 - 应用程序必须关闭对话弹出。