12

Android N允許您將您的活動鏈接到您的應用頁面 設置。只需爲android.intent.action.APPLICATION_PREFERENCES添加<intent-filter>即可。 Android N的「設置」應用將在您的應用中查找 擁有該<intent-filter>的活動。如果設置找到一個,它會在設置中爲您的應用的頁面添加一個齒輪 圖標,並且如果用戶點擊該齒輪,他們將會被帶到您指定的活動。設置應用程序如何啓動應用程序的非導出活動?

我很擔心安全問題,所以我申請an issue,尋找我們可以用android:permission使用,允許設置開始我們的活動權限,但不允許其他應用程序來啓動我們的活動(例如,WRITE_SECURE_SETTINGS)。

cketti然後指出you could just mark the activity as not exported, via android:exported="false"。令我驚訝的是,這很有效。

設置應用程序如何啓動標記爲未導出的活動?

我當然可以看到有一個權限來控制這個。但是,快速閱讀設置應用程序的清單(master branch,n-developer-preview-5分支)並沒有明顯的變化。

所以:

  • 是否有允許應用程序啓動另一個應用程序的非出口部件的許可?如果是這樣,那是什麼?

  • 如果不是,Settings如何解決這個問題?

+0

你在這裏回答了類似的問題:http://stackoverflow.com/questions/13892721/activity-exported-false-listed-in-activity-chooser – Shaishav

+0

@Shaishav:雖然它是在一個相關的主題(保護與' '),它沒有解決我在這裏提出的問題。 – CommonsWare

回答

7

我猜想在清單中沒有任何內容給予應用程序調用導出活動的權限。我相信它完成這個的方式是在設置應用程序的Android.mk文件中設置LOCAL_PRIVILEGED_MODULE := true。此標誌將給予應用程序系統級權限,並在操作系統編譯期間將其放入system/priv-app/目錄。

如果你看frameworks/base/core/java/android/app/ActivityManager.java的方法checkComponentPermission你可以看到,如果UID是SYSTEM的,那麼不管導出的設置如何,授予組件許可。

+0

我購買了它基於設置應用程序的UID的概念。我不是100%確信'checkComponentPermission()'是決定的地方,因爲我不希望SDK類決定是否允許你開始一個活動。 – CommonsWare

+0

@CommonsWare你是什麼意思 - 「我不希望SDK類正在決定你是否被允許開始一個活動」?你會期望什麼? – Vikram

+0

@Vikram:我預料它會在系統服務('ActivityManagerService'?)內部確定,或者是這個效果。現在,他們可能會使用SDK中的相同'checkComponentPermission()'方法。 – CommonsWare

相關問題