2012-01-11 89 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: 我們可以啓動設置特定帳戶,但隨後的嚇人對不起,這 - 應用程序必須關閉對話彈出。