[英]how to unregister a broadcast receiver in android with sinch?
I have this problem with the tutorial from sinch. 我在Sinch的教程中遇到这个问题。 The first time I logged in the broadcast receiver gets registered but the second time to visit the activity the progress dialog doesnt disappear I think its because theres already same broadcast receiver registered on the device. 我第一次登录广播接收器时,但是第二次访问该活动时,进度对话框并没有消失,我认为它是因为设备上已经注册了相同的广播接收器。 heres my code 这是我的代码
public class ListUserActivity extends AppCompatActivity {
private Object currentUserId;
private ArrayList names;
private ListView usersListView;
private ArrayAdapter<String> namesArrayAdapter;
Toolbar toolbar;
ProgressDialog progressDialog;
BroadcastReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_user);
toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
showSpinner();
}
public void openConversation(ArrayList<String> names, int pos) {
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.whereEqualTo("username", names.get(pos));
query.findInBackground(new FindCallback<ParseUser>() {
@Override
public void done(List<ParseUser> list, ParseException e) {
if (e == null) {
//start the messaging activity
} else {
Toast.makeText(getApplicationContext(),
"Error finding that user",
Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
//getMenuInflater().inflate(R.menu.menu_list_user, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
if(id == android.R.id.home){
// emulate the back hardware press of the device
super.onBackPressed();
}
return super.onOptionsItemSelected(item);
}
public void showSpinner(){
progressDialog = new ProgressDialog(this);
progressDialog.setTitle("Loading");
progressDialog.setMessage("Please wait...");
progressDialog.show();
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Boolean success = intent.getBooleanExtra("success", false);
progressDialog.dismiss();
//show a toast message if the Sinch
//service failed to start
if (!success) {
Toast.makeText(getApplicationContext(), "Messaging service failed to start", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(), "Messaging service success to start", Toast.LENGTH_LONG).show();
}
}
};
LocalBroadcastManager.getInstance(this).registerReceiver(receiver, new IntentFilter("com.serverus.oom.ListUserActivity"));
}
public void setConversationsList(){
currentUserId = ParseUser.getCurrentUser().getObjectId();
names = new ArrayList<String>();
ParseQuery<ParseUser> query = ParseUser.getQuery();
//don't include yourself
query.whereNotEqualTo("objectId", currentUserId);
query.findInBackground(new FindCallback<ParseUser>() {
public void done(List<ParseUser> userList, com.parse.ParseException e) {
if (e == null) {
for (int i = 0; i < userList.size(); i++) {
names.add(userList.get(i).getUsername().toString());
}
usersListView = (ListView) findViewById(R.id.usersListView);
namesArrayAdapter = new ArrayAdapter<String>(getApplicationContext(),
R.layout.user_list_item, names);
usersListView.setAdapter(namesArrayAdapter);
usersListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int i, long l) {
openConversation(names, i);
}
});
} else {
Toast.makeText(getApplicationContext(),
"Error loading user list",
Toast.LENGTH_LONG).show();
}
}
});
}
@Override
public void onResume() {
setConversationsList();
super.onResume();
}
}
thanks in advance guys. 在此先感谢大家。 Im just a newbie in android dev so please explain things to me if I dont get something in my code. 我只是android开发中的新手,所以如果我的代码中没有东西,请向我解释一下。
your trouble is because you register your BroadcastReciever every time activity starts, in OnCreate() method. 您的麻烦是因为每次活动开始时,您都在OnCreate()方法中注册了BroadcastReciever。 There's a link on showSpinner() method, where you initialize receiver = new BroadcastReceiver. showSpinner()方法上有一个链接,您可以在其中初始化接收器=新的BroadcastReceiver。 Save a boolean to SharedPreferences, and then in showSpinner() method check it. 将一个布尔值保存到SharedPreferences,然后在showSpinner()方法中进行检查。 If it is true, do not call receiver = ... 如果为真,则不要调用receiver = ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.