从广播接收器类访问活动

时间:2015-10-31 00:20:57

标签: android broadcastreceiver android-broadcastreceiver

我想保护设备密码背后的某些功能。因此,如果用户尝试使用这些功能,他们必须再次确认密码。

这是活动类中的代码。

error(50): C:\Users\Ethan\Documents\Visual Studio 2015\Projects\CypressLang\CypressLang\Source\.\Grammar\CypressGrammar.g4:1:0: syntax error: 'ï' came as a complete surprise to me    
error(50): C:\Users\Ethan\Documents\Visual Studio 2015\Projects\CypressLang\CypressLang\Source\.\Grammar\CypressGrammar.g4:1:1: syntax error: '»' came as a complete surprise to me    
error(50): C:\Users\Ethan\Documents\Visual Studio 2015\Projects\CypressLang\CypressLang\Source\.\Grammar\CypressGrammar.g4:1:2: syntax error: '¿' came as a complete surprise to me  
error(50): C:\Users\Ethan\Documents\Visual Studio 2015\Projects\CypressLang\CypressLang\Source\.\Grammar\CypressGrammar.g4:1:3: syntax error: mismatched input 'grammar' expecting SEMI

这是处理PermissionResponseReceiver类中密码确认对话框响应的代码。

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

是否有一种简单的方法可以引用PermissionResponseReceiver.onReceive(...)中的原始活动。目前我必须跟踪活动实例并提供一个公共静态方法来获取它,但这似乎非常hacky,我正在寻找替代方案。你有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:1)

使用本地广播在您的PermissionResponseReceiverActivity之间进行通信。

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
        }
    }
};