简体   繁体   English

如何使用Sinch取消注册android中的广播接收器?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM