广播接收器未在Android Pie中注册(工作) [英] Broadcast receiver is not registering (working) in Android Pie

查看:74
本文介绍了广播接收器未在Android Pie中注册(工作)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在这里,我的代码在棉花糖设备上都可以使用,但是在我的Pie设备上不能使用。



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



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



这是我的活动:

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


私人无效的SubmitMethode(){
preName = Objects.requireNonNull(editTextPremises.getText())。toString();
prewifiName = Objects.requireNonNull(editTextwifiName.getText())。toString();
prewifiUrl = Objects.requireNonNull(editTextwifiUrl.getText())。toString();
reserverUrl = Objects.requireNonNull(editTextserverUrl.getText())。toString();
preImage = getStringImage(bitmap);
Log.d( responseT,preName + == + prewifiName + == + prewifiUrl);

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

private void readFromLocalStorage(){

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

光标游标= dbHelper.readFromLocalDatabase(sqLiteDatabase);
while(cursor.moveToNext()){
String前提名称= cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_NAME));;
字符串前提WifiName = cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_WIFI_NAME));
字符串前提WifiUrl = cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_WIFIURL));
字符串前提前提ServerUrl = cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_SERVERURL));
字符串前提前提ImagePath = cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_IMAGEPATH));
int sync_status = cursor.getInt(cursor.getColumnIndex(DBContact.SYNC_STATUS));


sqPremisesList.add(新的SqPremises(premisesName,pres前提,WifiName,
前提,WifiUrl,前提,ServersUrl,前提,ImagesPath,sync_status))
}
//
sqPremisesAdapter.notifyDataSetChanged();
cursor.close();
/ * TODO://这是换行代码* /
dbHelper.close();
}

private void saveToAppServer(最终字符串pName,最终字符串pWifiName,最终字符串pWifiUrl,
最终字符串pServerUrl,最终字符串pImage){

如果(checkNetworkConnection()){

progressDialog.setTitle( Adding ....);
progressDialog.setMessage(请稍等,我们正在等待您的住所);
progressDialog.show();

字符串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,preparerUrl);
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);
字符串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);

/ *字符串值= false;
SharedPreferences.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();
}

}
},新的Response.ErrorListener(){
@Override
public void onErrorResponse(VolleyError错误){
/ / 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>

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

  if(checkNetworkConnection(context)){
final DBHelper dbHelper = new DBHelper(context);
最终SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase();

光标游标= dbHelper.readFromLocalDatabase(sqLiteDatabase);

while(cursor.moveToNext()){
int sync_status = cursor.getInt(cursor.getColumnIndex(DBContact.SYNC_STATUS));;
if(sync_status == DBContact.SYNC_STATUS_FAILED){

最终字符串premisName = cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_NAME));;
最终字符串premisWifiName = cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_WIFI_NAME));
final String premisWifiUrl = cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_WIFIURL));
final String premisServerUrl = cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_SERVERURL));
final String前提前提ImagePath = cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_IMAGEPATH));



字符串网址=常量。BASE_URL+ addpremises /;

HashMap< String,String> params = new HashMap< String,String>();
params.put( user,userID);
params.put( name,premisName);
params.put( wifi_name,premisWifiName);
params.put( online_url,premisWifiUrl);
params.put( offline_url,premisServerUrl);
params.put( image,premisesImagePath);
Log.d( responseV,String.valueOf(params));

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(URL,新的JSONObject(params),
新的Response.Listener< JSONObject>(){
@Override
public void onResponse( JSONObject response){
Log.d( responseJ,String.valueOf(response));

try {
String statusObject = response.getString( status);
字符串msgObject = response.getString( msg);

if(statusObject.equals( 200)){
dbHelper.updateLocalDatabase(premisName,premisWifiName,premisWifiUrl,
premisServerUrl,前提ImagePath,DBContact.SYNC_STATUS_OK,sqLiteDatabase);

context.sendBroadcast(new Intent(DBContact.UI_UPDATE_BROADCAST));
}
} catch(JSONException e){
e.printStackTrace();
}
}
},新的Response.ErrorListener(){
@Override
public void onErrorResponse(VolleyError错误){
Log.d( responseE,String.valueOf(error.getMessage()));
}
});
requestQueue.add(jsonObjectRequest);
}
}


}

}

public boolean checkNetworkConnection(Context context){

ConnectivityManager ConnectivityManager =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = ConnectivityManager.getActiveNetworkInfo();
return(networkInfo!= null&& networkInfo.isConnected());
}

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

解决方案

我遇到的问题仅与某些用于Android Pie的项目的网络通话有关。 / p>

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


Here my code is working till Marshmallow devices but in my Pie devices it is not working.

I read a Google documentation and found remove the receiver tag from manifest and add in activity but I can't understand how to add.

Main problem is when I adding a value in offline mode its stores a value in SQLite but when come in back online mode it does not send SQLite data to server above nogout devices.

Here is my activity:

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

And it is receiver which is add on manifest file:

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

And here I am adding my Network monitor file:

if (checkNetworkConnection(context)){
            final DBHelper dbHelper = new DBHelper(context);
            final SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase();

            Cursor cursor = dbHelper.readFromLocalDatabase(sqLiteDatabase);

            while (cursor.moveToNext()){
                int sync_status = cursor.getInt(cursor.getColumnIndex(DBContact.SYNC_STATUS));
                if (sync_status == DBContact.SYNC_STATUS_FAILED){

                    final String premisName = cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_NAME));
                    final String premisWifiName = cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_WIFI_NAME));
                    final String premisWifiUrl = cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_WIFIURL));
                    final String premisServerUrl = cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_SERVERURL));
                    final String premisesImagePath = cursor.getString(cursor.getColumnIndex(DBContact.PREMISES_IMAGEPATH));



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

                    HashMap<String, String> params = new HashMap<String, String>();
                    params.put("user", userID );
                    params.put("name", premisName);
                    params.put("wifi_name", premisWifiName);
                    params.put("online_url", premisWifiUrl);
                    params.put("offline_url", premisServerUrl);
                    params.put("image",premisesImagePath);
                    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));

                                    try {
                                        String statusObject = response.getString("status");
                                        String msgObject = response.getString("msg");

                                        if (statusObject.equals("200")) {
                                            dbHelper.updateLocalDatabase(premisName, premisWifiName, premisWifiUrl,
                                                    premisServerUrl, premisesImagePath, DBContact.SYNC_STATUS_OK, sqLiteDatabase);

                                            context.sendBroadcast(new Intent(DBContact.UI_UPDATE_BROADCAST));
                                        }
                                    }catch (JSONException e) {
                                        e.printStackTrace();
                                    }
                                }
                            }, new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Log.d("responseE", String.valueOf(error.getMessage()));
                        }
                    });
                    requestQueue.add(jsonObjectRequest);
                }
            }


        }

    }

    public boolean checkNetworkConnection(Context context){

        ConnectivityManager connectivityManager =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        return (networkInfo != null && networkInfo.isConnected());
    }

How can I solve this problem? I am a beginner to broadcast receiver.

解决方案

I had the issue related to network call on some project for Android Pie only.

If you are getting issue related to Network call, please add android:usesCleartextTraffic="true" in <application> tag in AndroidManifest.xml file. This might fix your issue for Pie.

这篇关于广播接收器未在Android Pie中注册(工作)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆