广播接收器未在Android Pie中注册(工作)

时间:2018-12-29 07:12:33

标签: java android broadcastreceiver

在这里,我的代码可以运行到棉花糖设备,但是在我的Pie设备中,它无法运行。

我阅读了一份Google文档,发现从清单中删除了接收者标签并添加了活动,但是我不知道如何添加。

主要问题是,当我在脱机模式下添加值时,它将值存储在SQLite中,但是当返回联机模式时,它不会将SQLite数据发送到nogout设备上方的服务器。

这是我的活动:

pd.melt(id_vars=['a','b','c'],value_vars=['12/01/2018', 
'12/02/2018','12/03/2018', etc.])

在清单文件上添加的是接收方:

  broadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {

                readFromLocalStorage();
            }
        };

     buttonAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SubmitMethode();
//                addPremises();
                relativeLayoutAdd.setVisibility(View.GONE);
                linearLayoutRecycler.setVisibility(View.VISIBLE);
                imageButtonPlus.setVisibility(View.VISIBLE);
            }
        });
    }


    private void SubmitMethode() {
        preName = Objects.requireNonNull(editTextPremises.getText()).toString();
        prewifiName = Objects.requireNonNull(editTextwifiName.getText()).toString();
        prewifiUrl = Objects.requireNonNull(editTextwifiUrl.getText()).toString();
        preserverUrl = Objects.requireNonNull(editTextserverUrl.getText()).toString();
        preImage = getStringImage(bitmap);
        Log.d("responseT",preName + "==" + prewifiName + "==" + prewifiUrl);

        saveToAppServer(preName, prewifiName, prewifiUrl, preserverUrl, preImage);
        editTextPremises.setText("");
        editTextwifiName.setText("");
        editTextwifiUrl.setText("");
        editTextserverUrl.setText("");
        textViewSelect.setText("Select Image");
    }

    private void readFromLocalStorage(){

        sqPremisesList.clear();
        DBHelper dbHelper = new DBHelper(this);
        SQLiteDatabase sqLiteDatabase = dbHelper.getReadableDatabase();

        Cursor cursor = dbHelper.readFromLocalDatabase(sqLiteDatabase);
        while (cursor.moveToNext()){
            String premisesName = cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_NAME));
            String premisesWifiName = cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_WIFI_NAME));
            String premisesWifiUrl = cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_WIFIURL));
            String premisesServerUrl = cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_SERVERURL));
            String premisesImagePath = cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_IMAGEPATH));
            int sync_status = cursor.getInt(cursor.getColumnIndex(DBContact.SYNC_STATUS));


            sqPremisesList.add(new SqPremises(premisesName, premisesWifiName,
                    premisesWifiUrl, premisesServerUrl, premisesImagePath, sync_status));
        }
//
        sqPremisesAdapter.notifyDataSetChanged();
        cursor.close();
        /*TODO: // this is new line code*/
        dbHelper.close();
    }

    private void saveToAppServer(final String pName, final String pWifiName, final String pWifiUrl,
                                 final String pServerUrl, final String pImage){

        if (checkNetworkConnection()){

            progressDialog.setTitle("Adding....");
            progressDialog.setMessage("please wait while we are waiting your premises");
            progressDialog.show();

            String Url = Constant.BASE_URL + "addpremises/";

            HashMap<String, String> params = new HashMap<String, String>();
            params.put("user", userID);
            params.put("name", preName);
            params.put("wifi_name", prewifiName);
            params.put("online_url", prewifiUrl);
            params.put("offline_url", preserverUrl);
            params.put("image", preImage);
            Log.d("responseV", String.valueOf(params));


            JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Url, new JSONObject(params),
                    new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse(JSONObject response) {
                            Log.d("responseJ", String.valueOf(response));
                            progressDialog.dismiss();
                            try {
                                String statusObject = response.getString("status");
                                String msgObject = response.getString("msg");

                                if (statusObject.equals("200")) {

                                    Toast.makeText(PremisesManagementActivity.this, msgObject, Toast.LENGTH_SHORT).show();

                                    saveToLocalStorage(pName, pWifiName, pWifiUrl, pServerUrl, pImage, DBContact.SYNC_STATUS_OK);

                                    linearLayoutAsk.setVisibility(View.GONE);
                                    relativeLayoutAdd.setVisibility(View.GONE);
                                    imageButtonPlus.setVisibility(View.VISIBLE);
                                    linearLayoutRecycler.setVisibility(View.VISIBLE);

                             /*   String value = "false";
                                SharedPreferences.Editor editor = sharedPreferences.edit();
                                editor.putString("value",value);
                                editor.commit();*/

                                }else {
                                    Toast.makeText(PremisesManagementActivity.this, msgObject, Toast.LENGTH_SHORT).show();
//                                linearLayoutAsk.setVisibility(View.VISIBLE);
//                                imageButtonPlus.setVisibility(View.VISIBLE);
//                                linearLayoutRecycler.setVisibility(View.GONE);
//                                relativeLayoutAdd.setVisibility(View.GONE);
                                    saveToLocalStorage(pName, pWifiName, pWifiUrl, pServerUrl, pImage, DBContact.SYNC_STATUS_FAILED);

                                }
                            }catch (JSONException e){
                                e.printStackTrace();
                            }

                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
//                    error.printStackTrace();
                    saveToLocalStorage(pName, pWifiName, pWifiUrl, pServerUrl, pImage, DBContact.SYNC_STATUS_FAILED);

                }
            });

        requestQueue.add(jsonObjectRequest);

//            MySingleton.getInstance(PremisesManagementActivity.this).addToRequestQue(jsonObjectRequest);
        }else {
            saveToLocalStorage(pName, pWifiName, pWifiUrl,
                    pServerUrl, pImage, DBContact.SYNC_STATUS_FAILED);
        }


    }
 private void saveToLocalStorage (String pName, String pWifiName, String pWifiUrl,
                                     String pServerUrl,String pImage, int sync){

        DBHelper dbHelper = new DBHelper(this);
        SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase();
        dbHelper.saveToLocalDatabase(pName, pWifiName, pWifiUrl, pServerUrl, pImage,  sync , sqLiteDatabase);
        readFromLocalStorage();
        dbHelper.close();

    }
//
    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    protected void onStart() {
        super.onStart();
        registerReceiver(broadcastReceiver, new IntentFilter(DBContact.UI_UPDATE_BROADCAST));

//            IntentFilter filter = new IntentFilter(DBContact.UI_UPDATE_BROADCAST);
//            registerReceiver(broadcastReceiver, filter, Manifest.permission.CHANGE_NETWORK_STATE, null);
//            sendBroadcast();


    }


    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(broadcastReceiver);
    }

在这里,我要添加我的网络监视器文件:

  <receiver android:name=".utils.NetworkMonitor">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>

如何解决此问题?我是广播接收器的初学者。

1 个答案:

答案 0 :(得分:1)

我只在某些Android Pie项目上遇到过与网络通话相关的问题。

如果遇到与网络通话相关的问题,请在android:usesCleartextTraffic="true"文件的<application>标签中添加AndroidManifest.xml。这可能会解决您的Pie问题。