簡體   English   中英

Android廣播接收器自定義權限

[英]Android broadcast receiver custom permissions

考慮到Android中的安全模型,我正在嘗試自定義權限。 我正在嘗試在我的應用程序中強制執行廣播者權限。 場景是我有一個活動A,它觸發了這樣的廣播(具有許可):

Intent updateUserBroadcast = new Intent();
updateUserBroadcast.setAction("android.intent.action.ACTION_UPDATE_USERNAME");
updateUserBroadcast.putExtra("username", userName);
sendBroadcast(updateUserBroadcast, "com.android.MaliciousApp.RECEIVE_BROADCAST");

在本活動A中,我像這樣在onCreate中注冊一個接收器:

    private BroadcastReceiver mUpdateUsernameReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.v("gaurav", "onReceive called");

        SharedPreferences prefs = context.getSharedPreferences("profilePref", Context.MODE_WORLD_READABLE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putString("username", intent.getStringExtra("username"));
        editor.apply();

        Toast.makeText(context, context.getString(R.string.string_successfully_updated), Toast.LENGTH_SHORT).show();
    }
};

我希望接收者能夠收到廣播,因為它具有所需的權限。 但是它沒有接收到該活動發送的廣播。 關於為什么我不使用LocalBroadcastManager可能會有爭論,但是我的動機是弄清楚為什么這種方法不能按預期工作。

我沒有在清單中聲明我的接收器,而僅動態地對其進行注冊。 以上所有代碼均來自同一應用程序中的單個活動。 因此,這里不涉及IPC,僅是一個簡單的檢查權限的示例。 任何幫助,將不勝感激。

如果要通過具有許可權的廣播發送意圖,則應使用以下方法注冊廣播接收器:

registerReceiver(receiver, intentFilter, "com.android.MaliciousApp.RECEIVE_BROADCAST", null);

並且在清單中,您將必須告訴已為您的應用授予了哪些權限。

<manifest>
    ...
    <uses-permission android:name="com.android.MaliciousApp.RECEIVE_BROADCAST" />
    <permission android:name="com.android.MaliciousApp.RECEIVE_BROADCAST" />
    ...
</manifest>

您可以在此處參考有關許可的文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM