Try : Insurtech, Application Development

AgriTech(1)

Augmented Reality(21)

Clean Tech(9)

Customer Journey(17)

Design(45)

Solar Industry(8)

User Experience(68)

Edtech(10)

Events(34)

HR Tech(3)

Interviews(10)

Life@mantra(11)

Logistics(6)

Manufacturing(5)

Strategy(18)

Testing(9)

Android(48)

Backend(32)

Dev Ops(11)

Enterprise Solution(33)

Technology Modernization(9)

Frontend(29)

iOS(43)

Javascript(15)

AI in Insurance(41)

Insurtech(67)

Product Innovation(59)

Solutions(22)

E-health(12)

HealthTech(25)

mHealth(5)

Telehealth Care(4)

Telemedicine(5)

Artificial Intelligence(154)

Bitcoin(8)

Blockchain(19)

Cognitive Computing(8)

Computer Vision(8)

Data Science(24)

FinTech(51)

Banking(7)

Intelligent Automation(27)

Machine Learning(48)

Natural Language Processing(14)

expand Menu Filters

Optimizing Android Apps on Variable Network Speeds

Most of the apps today are developed and designed which can perform on all types of networks. While some of us are probably enjoying great connectivity courtesy of our carriers at our school/office/coffees shop wi-fi, there are still some people suffering from poor mobile connections, particularly in emerging markets. If you are developing an Android app you may already fetching information from internet. While doing so there is a chance that internet connection is not available on users handset, connection is slow or fast. Hence its always a good idea to create an app that can perform accordingly on all types of networks.

Facebook has made it known that their goal is to be able to reach and give access to as many markets as possible, and this includes those that still use 2G connections. In this post, we will share how this is possible by Network Connection Class

Network Connection Class allows you to check the quality of the internet connection of the current user, it is an android library. It is a simple code that will help you identify what kind of internet connection a user has on his/her device. Network Connection Class currently only measures the user’s downstream bandwidth. Latency is also an important factor, but in our tests, we’ve found that bandwidth is a good proxy for both.

The connection gets classified into several Connection Classes that makes it easy to develop against. The library does this by listening to the existing internet traffic done by your app and notifying you when the user’s connection quality changes. Developers can then use this Connection Class information and adjust the application’s behavior (request lower quality images or video, throttle type-ahead, etc).

The Network Connection Class library takes care of spikes using a moving average of the incoming samples, and also applies some hysteresis (both with a minimum number of samples and amount the average has to cross a boundary before triggering a bucket change):

Code Sample:
Connection Class provides an interface for classes to add themselves as listeners for when the network’s connection quality changes. In the subscriber class, implement ConnectionClassStateChangeListener:

[section_tc][column_tc span=’12’][blockquote_tc style=’style4′ class=”blog-code”]package com.example.android.connectionclasstest;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.facebook.network.connectionclass.ConnectionClassManager;
import com.facebook.network.connectionclass.ConnectionQuality;
import com.facebook.network.connectionclass.DeviceBandwidthSampler;

import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

public class MainActivity extends AppCompatActivity {

private static final String TAG = “ConnectionClass-Sample”;
private ConnectionClassManager mConnectionClassManager;
private DeviceBandwidthSampler mDeviceBandwidthSampler;
private TextView mTextView;
private ImageView mImageView;
private ImageLoader imageLoader;
private ProgressBar mRunningBar;
private ConnectionChangedListener mListener;
private int mTries = 0;
private ConnectionQuality mConnectionClass = ConnectionQuality.UNKNOWN;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageLoader = ImageLoader.getInstance();
imageLoader.init(ImageLoaderConfiguration.createDefault(getBaseContext()));
mConnectionClassManager = ConnectionClassManager.getInstance();
mDeviceBandwidthSampler = DeviceBandwidthSampler.getInstance();
mRunningBar = (ProgressBar) findViewById(R.id.runnigBar);
mTextView = (TextView) findViewById(R.id.connectionClass);
mImageView = (ImageView) findViewById(R.id.imageView);
findViewById(R.id.testButton).setOnClickListener(DownloadImage);
mTextView.setText(mConnectionClassManager.getCurrentBandwidthQuality().toString());
mListener = new ConnectionChangedListener();
findViewById(R.id.upload).setOnClickListener(UploadImage);
findViewById(R.id.vdButton).setOnClickListener(PlayVideo);
}

@Override
protected void onPause() {
super.onPause();
mConnectionClassManager.remove(mListener);
}

@Override
protected void onResume() {
super.onResume();

mConnectionClassManager.register(mListener);
}
String connectionQuality=null;

private class ConnectionChangedListener
implements ConnectionClassManager.ConnectionClassStateChangeListener {

@Override
public void onBandwidthStateChange(ConnectionQuality bandwidthState) {
mConnectionClass = bandwidthState;
runOnUiThread(new Runnable() {
@Override
public void run() {

connectionQuality = mConnectionClass.toString();
switch (connectionQuality){
case “POOR”:
double val1 = mConnectionClassManager.getDownloadKBitsPerSecond();
mTextView.setText(“Quality is “+connectionQuality+” “+val1 +” and Bandwidth under 150 kbps so poor quality Image downloaded”);
android.support.design.widget.Snackbar.make(findViewById(R.id.main),”Quality is “+connectionQuality+ val1 +”\n and Bandwidth under 150 kbps so poor\n quality image is downloading”, android.support.design.widget.Snackbar.LENGTH_LONG).show();
new DnloadImage().execute(“http://storage.googleapis.com/ix_choosemuse/uploads/2016/02/android-logo.png”); // 80 kb
break;

case “MODERATE”:
double val2 = mConnectionClassManager.getDownloadKBitsPerSecond();
mTextView.setText(“Quality is “+connectionQuality+” “+val2 +” and Bandwidth between 150 to 550 kbps so moderate quality Image downloaded”);
android.support.design.widget.Snackbar.make(findViewById(R.id.main),”Quality is “+connectionQuality+ val2 +”\n and Bandwidth between 150 to 550 kbps so moderate\n quality Image is downloading”, android.support.design.widget.Snackbar.LENGTH_LONG).show();
new DnloadImage().execute(“http://static.giantbomb.com/uploads/original/15/157771/2312725-a10.jpeg”); // 454 kb
break;

case “GOOD”:
double val3 = mConnectionClassManager.getDownloadKBitsPerSecond();
android.support.design.widget.Snackbar.make(findViewById(R.id.main),”Quality is “+connectionQuality+ val3 +”\n and Bandwidth between 550 to 2000 kbps so good\n quality Image is downloading”, android.support.design.widget.Snackbar.LENGTH_LONG).show();
mTextView.setText(“Quality is “+connectionQuality+” “+val3 +” and Bandwidth between 550 to 2000 kbps so good quality Image downloaded”);
new DnloadImage().execute(“http://techclones.com/wp-content/uploads/2013/09/Best-Dark-HD-Wallpaper-Android1.png”); // 1.04 mb
break;

case “EXCELLENT”:
double val4 = mConnectionClassManager.getDownloadKBitsPerSecond();
mTextView.setText(“Quality is “+connectionQuality+” “+val4 +” and Bandwidth over 2000 kbps so excellent quality Image downloaded”);
android.support.design.widget.Snackbar.make(findViewById(R.id.main),”Quality is “+connectionQuality+ val4 +”\n and Bandwidth over 2000 kbps so high\n quality Image is downlaoding”, android.support.design.widget.Snackbar.LENGTH_LONG).show();
new DnloadImage().execute(“http://static.giantbomb.com/uploads/original/15/157771/2312721-a7.png”); // 2.49 mb
break;

case “UNKNOWN”:
mTextView.setText(“Sorry we are getting nothing”);
break;
}
}
});
}
}

private final View.OnClickListener DownloadImage = new View.OnClickListener() {
@Override
public void onClick(View v) {
mRunningBar.setVisibility(View.VISIBLE);
mTries=0;
String quality = mConnectionClass.toString();
Toast.makeText(MainActivity.this, “Quality ->”+quality, Toast.LENGTH_SHORT).show();
new DnloadImage().execute(“”);
}
};

private final View.OnClickListener UploadImage = new View.OnClickListener() {
@Override
public void onClick(View v) {
//showFileChooser();
Intent intent = new Intent(MainActivity.this, UplaodActivity.class);
startActivity(intent);
}
};

private final View.OnClickListener PlayVideo = new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, VideoActivity.class);
startActivity(intent);
}
};

private class DnloadImage extends AsyncTask<String, Void, Bitmap> {

@Override
protected void onPreExecute() {
mDeviceBandwidthSampler.startSampling();
mRunningBar.setVisibility(View.VISIBLE);
}

@Override
protected Bitmap doInBackground(String… url) {
String imageURL = url[0];
try {
ByteArrayInputStream byteArrayInputStream;
// Bitmap bitmap;
URLConnection connection = new URL(imageURL).openConnection();
connection.setUseCaches(false);
connection.connect();
InputStream input = connection.getInputStream();

try {
Bitmap bitmap = BitmapFactory.decodeStream(input);
return bitmap;
} finally {
input.close();
}
} catch (IOException e) {
Log.e(TAG, “Error while downloading image.”);
}
return null;
}

@Override
protected void onPostExecute(Bitmap bp) {
mDeviceBandwidthSampler.stopSampling();
Toast.makeText(MainActivity.this,””+mTries,Toast.LENGTH_SHORT).show();

if (mConnectionClass == ConnectionQuality.UNKNOWN && mTries < 10) {
mTries++;
new DnloadImage().execute(“https://familysearch.org/learn/wiki/en/images/9/9d/Links-Folder-icon.png”);
}
if (!mDeviceBandwidthSampler.isSampling()) {
mImageView.setImageBitmap(bp);
//imageLoader.getInstance().displayImage(mURL,mImageView);
mRunningBar.setVisibility(View.GONE);

}
}
}
}[/blockquote_tc][/column_tc][/section_tc]

The main way to provide the ConnectionClassManager data is to use the DeviceBandwidthSampler. The DeviceBandwidthSampler samples the device’s underlying network stats, when you tell it you’re performing some sort of network activity (downloading photos, playing a video, etc).

To know more about the Network Connection Class and its implementation, feel free to say hello@mantralabsglobal.com. We would surely respond to your queries.

 

Cancel

Knowledge thats worth delivered in your inbox

Smart Manufacturing Dashboards: A Real-Time Guide for Data-Driven Ops

Smart Manufacturing starts with real-time visibility.

Manufacturing companies today generate data by the second through sensors, machines, ERP systems, and MES platforms. But without real-time insights, even the most advanced production lines are essentially flying blind.

Manufacturers are implementing real-time dashboards that serve as control towers for their daily operations, enabling them to shift from reactive to proactive decision-making. These tools are essential to the evolution of Smart Manufacturing, where connected systems, automation, and intelligent analytics come together to drive measurable impact.

Data is available, but what’s missing is timely action.

For many plant leaders and COOs, one challenge persists: operational data is dispersed throughout systems, delayed, or hidden in spreadsheets. And this delay turns into a liability.

Real-time dashboards help uncover critical answers:

  • What caused downtime during last night’s shift?
  • Was there a delay in maintenance response?
  • Did a specific inventory threshold trigger a quality issue?

By converting raw inputs into real-time manufacturing analytics, dashboards make operational intelligence accessible to operators, supervisors, and leadership alike, enabling teams to anticipate problems rather than react to them.

1. Why Static Reports Fall Short

  • Reports often arrive late—after downtime, delays, or defects have occurred.
  • Disconnected data across ERP, MES, and sensors limits cross-functional insights.
  • Static formats lack embedded logic for proactive decision support.

2. What Real-Time Dashboards Enable

Line performance and downtime trends
Track OEE in real time and identify underperforming lines.

Predictive maintenance alerts
Utilize historical and sensor data to identify potential part failures in advance.

Inventory heat maps & reorder thresholds
Anticipate stockouts or overstocks based on dynamic reorder points.

Quality metrics linked to operator actions
Isolate shifts or procedures correlated with spikes in defects or rework.

These insights allow production teams to drive day-to-day operations in line with Smart Manufacturing principles.

3. Dashboards That Drive Action

Role-based dashboards
Dashboards can be configured for machine operators, shift supervisors, and plant managers, each with a tailored view of KPIs.

Embedded alerts and nudges
Real-time prompts, like “Line 4 below efficiency threshold for 15+ minutes,” reduce response times and minimize disruptions.

Cross-functional drill-downs
Teams can identify root causes more quickly because users can move from plant-wide overviews to detailed machine-level data in seconds.

4. What Powers These Dashboards

Data lakehouse integration
Unified access to ERP, MES, IoT sensor, and QA systems—ensuring reliable and timely manufacturing analytics.

ETL pipelines
Real-time data ingestion from high-frequency sources with minimal latency.

Visualization tools
Custom builds using Power BI, or customized solutions designed for frontline usability and operational impact.

Smart Manufacturing in Action: Reducing Market Response Time from 48 Hours to 30 Minutes

Mantra Labs partnered with a North American die-casting manufacturer to unify its operational data into a real-time dashboard. Fragmented data, manual reporting, delayed pricing decisions, and inconsistent data quality hindered operational efficiency and strategic decision-making.

Tech Enablement:

  • Centralized Data Hub with real-time access to critical business insights.
  • Automated report generation with data ingestion and processing.
  • Accurate price modeling with real-time visibility into metal price trends, cost impacts, and customer-specific pricing scenarios. 
  • Proactive market analysis with intuitive Power BI dashboards and reports.

Business Outcomes:

  • Faster response to machine alerts
  • Quality incidents traced to specific operator workflows
  • 4X faster access to insights led to improved inventory optimization.

As this case shows, real-time dashboards are not just operational tools—they’re strategic enablers. 

(Learn More: Powering the Future of Metal Manufacturing with Data Engineering)

Key Takeaways: Smart Manufacturing Dashboards at a Glance

AspectWhat You Should Know
1. Why Static Reports Fall ShortDelayed insights after issues occur
Disconnected systems (ERP, MES, sensors)
No real-time alerts or embedded decision logic
2. What Real-Time Dashboards EnableTrack OEE and downtime in real-time
Predictive maintenance using sensor data
Dynamic inventory heat maps
Quality linked to operators
3. Dashboards That Drive ActionRole-based views (operator to CEO)
Embedded alerts like “Line 4 down for 15+ mins”
Drilldowns from plant-level to machine-level
4. What Powers These DashboardsUnified Data Lakehouse (ERP + IoT + MES)
Real-time ETL pipelines
Power BI or custom dashboards built for frontline usability

Conclusion

Smart Manufacturing dashboards aren’t just analytics tools—they’re productivity engines. Dashboards that deliver real-time insight empower frontline teams to make faster, better decisions—whether it’s adjusting production schedules, triggering preventive maintenance, or responding to inventory fluctuations.

Explore how Mantra Labs can help you unlock operations intelligence that’s actually usable.

Cancel

Knowledge thats worth delivered in your inbox

Loading More Posts ...
Go Top
ml floating chatbot