我正在设置一个内部BroadcastReceiver
来获取 Activity 转换更新,例如步行、in_Vehicle。但 onReceive
方法永远不会被调用。
onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Intent intent = new Intent(TRANSITIONS_RECEIVER_ACTION);
mPendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
mTransitionsReceiver = new TransitionsReceiver();
registerReceiver(mTransitionsReceiver, new IntentFilter(TRANSITIONS_RECEIVER_ACTION));
mLogFragment = (LogFragment) getSupportFragmentManager().findFragmentById(R.id.log_fragment);
}
setupActivityTransitions();
setupActivityTransitions()
方法
ActivityTransitionRequest request = new ActivityTransitionRequest(transitions);
// Register for Transitions Updates.
Task<Void> task =
ActivityRecognition.getClient(this)
.requestActivityTransitionUpdates(request, mPendingIntent);
task.addOnSuccessListener(
new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void result) {
Log.i(TAG, "Transitions Api was successfully registered.");
}
});
task.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(Exception e) {
Log.e(TAG, "Transitions Api could not be registered: " + e);
}
});
广播接收器
public class TransitionsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("@2345","dfhudfdf");
if (!TextUtils.equals(TRANSITIONS_RECEIVER_ACTION, intent.getAction())) {
mLogFragment.getLogView()
.println("Received an unsupported action in TransitionsReceiver: action="
+ intent.getAction());
return;
}
if (ActivityTransitionResult.hasResult(intent)) {
ActivityTransitionResult result = ActivityTransitionResult.extractResult(intent);
for (ActivityTransitionEvent event : result.getTransitionEvents()) {
String activity = toActivityString(event.getActivityType());
String transitionType = toTransitionType(event.getTransitionType());
mLogFragment.getLogView()
.println("Transition: "
+ activity + " (" + transitionType + ")" + " "
+ new SimpleDateFormat("HH:mm:ss", Locale.US)
.format(new Date()));
}
}
}
}
最佳答案
获取您的onReceive()
调用,您将必须添加这些 -
将您的 BroadcastReceiver 添加到 list 中,以这种方式 -
<receiver android:name="YourReceiver"> <intent-filter> <action android:name="YourAction" /> </intent-filter> </receiver>
调用
registerReceiver()
在你的 Activity 中。 另外,别忘了调用unegisterReceiver()
以避免泄漏。
关于java - BroadcastReceiver的 "onReceive"方法从未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55938937/