2015-10-31 34 views
0

我想保護設備密碼背後的某些功能。因此,如果用戶嘗試使用這些功能,他們必須再次確認密碼。從廣播接收機類訪問活動

這是活動類中的代碼。

Context appContext = activity.getApplicationContext(); 
RestrictionsManager rManager = (RestrictionsManager) appContext.getSystemService(appContext.RESTRICTIONS_SERVICE); 
rManager.requestPermission(RestrictionsManager.ACTION_REQUEST_PERMISSION, "someID", new PersistableBundle()); 

這是處理PermissionResponseReceiver類中的密碼確認對話框的響應的代碼。

public class PermissionResponseReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(final Context context, Intent intent) { 
     ...... 
    } 
} 

有沒有簡單的方法來引用PermissionResponseReceiver.onReceive(...)中的原始活動。目前,我必須跟蹤活動實例並提供一個公共靜態方法來獲取它,但是這看起來很詭異,我正在尋找替代方法。你有什麼建議嗎?謝謝。

+0

你爲什麼要這麼做?舉行任何活動參考是危險的,但特別是靜態的。如果你解釋你想達到的目標,有人會告訴你正確的做法。 – Simon

+0

如果密碼被確認,那麼我希望該活動能夠執行某些操作。因此,我需要能夠訪問回活動onReceive() – hixhix

+0

嘗試移動PermissionResponseReceiver作爲您的活動的內部類。 – kzz

回答

1

使用本地廣播在您的PermissionResponseReceiver和您的Activity之間進行通信。

在你PermissionResponseReceiver

public class PermissionResponseReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(final Context context, Intent intent) { 
     ...... 

    // Create the intent that will be broadcast 
    Intent intent = new Intent("my-permission-response-action"); 
    // Add any extra data you want to put in the intent here.. 

    // Broadcast to any registered receivers 
    LocalBroadcastManager.getInstance(context).sendBroadcast(intent); 
    } 
} 

在你Activity

@Override 
public void onResume() { 
    super.onResume(); 

    final LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this); 

    // IntentFilter to define which actions mLocalBroadcastReceiver will respond to 
    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addAction("my-permission-response-action"); 

    // Register for desired broadcasts 
    localBroadcastManager.registerReceiver(mLocalBroadcastReceiver, intentFilter); 
} 

@Override 
public void onPause() { 

    // Unregister our mLocalBroadcastReceiver 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mLocalBroadcastReceiver); 
    super.onPause(); 
} 

/** 
* My Local Broadcast Receiver 
*/ 
private BroadcastReceiver mLocalBroadcastReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     if (intent.getAction().equals(my-permission-response-action)) { 
      // Our Activity has received the broadcast from PermissionResponseReceiver. 
      // If we added any extras to the intent we can extract them here 
      // for use in the Activity 
     } 
    } 
};