嗨开发人员我是Android应用程序开发的新手。
我的要求是基于互联网可用性,我必须展示不同的活动。
我有两个屏幕A和B.
当互联网可用时,我直接导航到屏幕B.
当互联网不可用时,它将显示屏幕A.
它总是检查互联网可用性,如果没有,它总是显示屏幕A.
实现此功能的最佳方法是什么。
答案 0 :(得分:1)
ConnectivityManager的getActiveNetworkInfo()方法返回一个NetworkInfo实例,表示它可以找到的第一个连接的网络接口,如果没有连接任何接口,则返回null。检查此方法是否返回null应足以判断是否有可用的Internet连接。
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Line2D;
import javax.swing.*;
public class testHome {
private JFrame frame;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
testHome window = new testHome();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public testHome() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new myPanel();
frame.getContentPane().add(panel, BorderLayout.CENTER);
}
}
class myPanel extends JPanel {
MyComponent comp;
public myPanel() {
super(null);
comp = new MyComponent(5, 5);
this.add(comp);
revalidate();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
Line2D.Double line = new Line2D.Double(10, 10, comp.getX(), comp.getY());
System.out.println(comp.getX() + " " + comp.getY());
g2d.draw(line);
}
}
class MyComponent extends JComponent implements MouseListener, MouseMotionListener {
int x;
int y;
int mx;
int my;
public MyComponent(int x, int y) {
this.setVisible(true);
this.setBounds(x, y, 15, 15);
this.x = x;
this.y = y;
addMouseMotionListener(this);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.black);
g2d.fillRect(this.x, this.y, 15, 15);
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("dragging");
int dx = e.getX() - mx;
int dy = e.getY() - my;
this.setBounds(this.getX() + dx, this.getY() + dy, 15, 15);
}
@Override
public void mousePressed(MouseEvent e) {
mx = e.getX();
my = e.getY();
}
@Override
public void mouseMoved(MouseEvent e) {}
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
}
您还需要:
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
现在,在OnCreate()
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
答案 1 :(得分:0)
无需保留两个屏幕/活动来检查互联网可用性 它可以使用单个屏幕/活动来实现。
根据设备上的互联网可用性,您需要隐藏/显示元素技巧。
这就是我通常在所有Android应用程序中执行的操作:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorWhite">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/item_list"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:id="@+id/rl_internet"
android:visibility="gone">
<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_centerHorizontal="true"
android:src="@drawable/connection_lost"
android:id="@+id/internet_lost_img"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CONNECTION LOST!!"
android:layout_below="@+id/internet_lost_img"
android:layout_centerHorizontal="true"
android:textColor="@color/colorBlack"
android:textStyle="bold"
android:textSize="18sp"
android:layout_marginTop="15dp"
android:id="@+id/connection_lost_header"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/connection_lost_header"
android:layout_marginTop="7dp"
android:text="Please check Internet Settings"
android:textColor="@color/colorGray"
android:textSize="15sp"
android:textStyle="bold"
android:layout_centerHorizontal="true"
android:id="@+id/connection_check_txt"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/connection_check_txt"
android:id="@+id/OR_txt"
android:text="OR"
android:layout_centerHorizontal="true"
android:layout_marginTop="7dp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/OR_txt"
android:textColor="@color/colorWhite"
android:background="@drawable/btn_back"
android:text="RE-TRY"
android:textSize="16sp"
android:padding="2dp"
android:layout_marginTop="10dp"
android:id="@+id/retry"
android:layout_centerHorizontal="true"/>
</RelativeLayout>
</RelativeLayout>
正如您所看到的,名为“rl_internet”的内部相对布局包含显示互联网不可用的布局,其中可见性设置为'消失'
您检查onCreate()方法中是否有Internet可用,如果互联网不可用,您基本上将该相对布局的可见性设置为可见,并使屏幕上的其余元素不可见。
如果互联网可用:
无需做任何事情
其他:
rl_internet.setVisibility(View.VISIBLE)强>
希望你明白这个想法!