xshell访问android
2018-01-02 10:23:42 yanlaifan 阅读数 2934
xshell连接android设备

1、打开xshell




2、查看android设备




3、连接设备




2016-01-26 10:52:04 u012372365 阅读数 201
package com.example.leiyan_tupian;


import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.WeakReference;
import java.net.MalformedURLException;
import java.net.URL;


import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;


public class MainActivity extends Activity {
public ImageView iv;
private final MyHandler handler = new MyHandler(this);


private static final int LOAD_SUCCSS = 0x1;


protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bt1 = (Button) findViewById(R.id.button1);
iv = (ImageView) findViewById(R.id.imageView1);
bt1.setOnClickListener(new OnClickListener() {


public void onClick(View v) {


new Thread(new Runnable() {
public void run() {
try {
URL url = new URL(
"http://pic2.ooopic.com/01/03/51/25b1OOOPIC19.jpg");
InputStream in = url.openStream();
Bitmap bitmap = BitmapFactory.decodeStream(in);
Message msg = handler.obtainMessage(LOAD_SUCCSS,
bitmap);
handler.sendMessage(msg);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
});
}


private static class MyHandler extends Handler {
private final WeakReference<MainActivity> weakreference;


public MyHandler(MainActivity mainactivity) {
weakreference = new WeakReference<MainActivity>(mainactivity);
}


public void handleMessage(Message msg) {
MainActivity mainActivity = weakreference.get();
if (mainActivity != null) {
switch (msg.what) {
case LOAD_SUCCSS:
mainActivity.iv.setImageBitmap((Bitmap) msg.obj);
break;
}
}
}
}


}
2011-11-14 11:17:13 ly0309 阅读数 642

在Android中如何访问外设存储设备?如:Nand 和 Flash卡。我们对7寸2.3版本和10寸2.1版本的Android进行了测试。测试代码和结果如下:

测试代码:

Application Emenu_App = getApplication();
File aa = getDatabasePath("emenu_db.db");
File bb = getFilesDir();
File cc = getExternalFilesDir(null);

File dd = Environment.getDataDirectory();
File ee = Environment.getDownloadCacheDirectory();
File ff = Environment.getExternalStorageDirectory();
File gg = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS);
File hh = Environment.getRootDirectory();
File ii = Environment.getExternalStorageState(); 

返回结果:

  7寸2.3版本(Nand在PC端可见)  10寸2.1版本(Nand在PC端不可见) 
aa /data/data/Emenu.java/databases/emenu_db.db  相同
bb /data/data/Emenu.java/files   相同
cc /mnt/sdcard/Android/data/Emenu.java/files  不支持此函数
dd /data  相同
ee /cache  相同
ff /mnt/sdcard   /nand
hh /system  不支持此函数 
gg 自定义闹铃的路径,自定义铃声、短信音文件夹路径同样可以用此方法得到,只是参数不同。 相同
ii "mounted"  相同

 

File Exporler 的截图如下:

其它需要注意的:

1、有无SDCard得到的名称相同除了CC之外(在没有SDcard时,CC返回的内容为null)
2、如果在移动设备端,将Nand Unmount,即移除,则SDCard和Nand都不能使用。
3、Nand如果在PC端可见,即通过USB可以读取,则,Eclipse的FileExporler中,SDCard包含了Nand和SDcard,其中SDcard被映射到tflash文件夹,这个在访问时需要注意。
4、如果Nand在PC端不可见,则,Eclipse的FileExporler中,SDCard只表示SDcard的内容。 

原创文章,转载请注明: 转载自最牛网 http://www.zuiniuwang.com/

2012-05-01 15:28:13 xiaoandroid 阅读数 153

  (源《Android开发入门教程》及互联网)


  尽管android通过首选项和数据库提供了结构化的存储方式,但是有时简单的文件就足够了。

          读取与写入特定于应用程序的数据文件与在java应用程序中的做法几乎一样,关键在于对Activity或其他Context使用openFileInput()或onpenFileOutput(),以便分别获取InputStream或OutputStream,其余的与常规的I/O逻辑没有太大区别。

          注意openFileInput()和onpenFileOutput()不接受文件路径,只接受简单的文件名。且所有应用程序都可以访问外部存储空间,而openFileInput()和onpenFileOutput()只能作用于应用程序私有空间。

          以下布局可用于大部分文本编辑器:

    <?xml version="1.0" encoding="utf-8"?>  
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        android:orientation="vertical" >  
      
        <Button  
            android:id="@+id/close"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:text="Close"  
            />  
        <EditText  
            android:id="@+id/editor"  
            android:layout_width="fill_parent"  
            android:layout_height="fill_parent"  
            android:singleLine="false"  
            android:gravity="top" />  
      
    </LinearLayout>  

java的实现如下:


package cn.wyu.testandroid;

import java.io.*;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.*;

public class ReadWriteActivity extends Activity {
	/** Called when the activity is first created. */
	private final static String NOTES = "notes.txt";
	private EditText editor;
	private Button btn;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		editor = (EditText) findViewById(R.id.editor);
		btn = (Button) findViewById(R.id.close);
		
		btn.setOnClickListener(new Button.OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				finish();  // 结束当前Activity
			}
		});
	}

	// Activity启动时经历:onCreate->onStart->onResume 
	public void onResume() {
		super.onResume();
		try {
			InputStream in = openFileInput(NOTES);
			if (in != null) {
				InputStreamReader inr = new InputStreamReader(in);  //字节流
				BufferedReader br = new BufferedReader(inr);  //缓冲流				
				//StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer
				//的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,
				//不生成新的对象,在内存使用上要优于String类
				String str;
				StringBuffer buf = new StringBuffer();
				while ((str = br.readLine()) != null) {
					buf.append(str + "\n");
				}
				in.close();
				editor.setText(buf.toString());
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
		} catch (Throwable t) {
			// TODO Auto-generated catch block
			Toast.makeText(this, "Exception: " + t.toString(), 2000).show();
		}
	}

	//当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:
	//系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
	public void onPause() {
		super.onPause();
		try {
			OutputStreamWriter out = new OutputStreamWriter(openFileOutput(
					NOTES, 0));
			out.write(editor.getText().toString());
			out.flush();
			out.close();
		} catch (Throwable t) {
			// TODO Auto-generated catch block
			Toast.makeText(this, "Exception " + t.toString(), 2000).show();
		}
	}
}


此示例将得到一个持久性的记事本,键入的内容都将保留(除非进行了删除)。

读取数据:

        如果要打开存放在/data/data/<package name>/files目录应用私有的文件,可以使用Activity提供openFileInput()方法。

FileInputStream inStream = this.getContext().openFileInput(filename);

   或者直接使用文件的绝对路径:
File file = new File("/data/data/"应用所在包"/files/"文件名"");

FileInputStream inStream = new FileInputStream(file);
对于私有文件只能被创建该文件的应用访问,如果希望文件能被其他应用读和写,可以在创建文件时,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。

Activity还提供了getCacheDir()和getFilesDir()方法:
getCacheDir()方法用于获取/data/data/<package name>/cache目录
getFilesDir()方法用于获取/data/data/<package name>/files目录

 

存储数据:

        Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。创建的文件保存在/data/data/<package name>/files目录,通过点击Eclipse菜单“Window”-“Show View”-“Other”,在对话窗口中展开android文件夹,选择下面的File Explorer视图,然后在File Explorer视图中展开/data/data/<package name>/files目录就可以看到该文件。
openFileOutput()方法的第二参数用于指定操作模式,有四种模式,分别为:

0或Context.MODE_PRIVATE    为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容。

Context.MODE_APPEND   模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE  表示当前文件可以被其他应用读取。

Context.MODE_WORLD_WRITEABLE 表示当前文件可以被其他应用写入。

如果希望文件被其他应用读和写,可以传入: 

openFileOutput(filename,Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
      也可以在外部存储空间(如SD卡)进行读取和写入。使用Environment.getExternalStorageDirectory()获取SD卡根目录下的File对象,当然还得获得权限:

在AndroidManifest.xml中加入访问SDCard的权限如下:
<!-- 在SDCard中创建与删除文件权限 -->

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Environment.getExternalStorageState()方法用于获取SDCard的状态。



2017-10-04 16:01:08 s452195377 阅读数 466

由于本次笔记是在本机上执行的,所以安装了appache的tomcat服务器,首先认识一下,servlet类,这个类是在tomcat服务器里面进行协议的,tomcat属于协议里面的应用层吧,所以和路由器里面的那层没什么重要的联系,本次是在本机上执行的,因为要进行访问,所以我的手机终端要用到的网管是路由器里面的默认网关,而我的路由器可以发送wifi网络,网关和电脑连接的网关是一致的,所以网络是没有问题的,接下来的问题就是http协议的具体流程了,java里面的tomcat服务器是可以直接加载servlet类的,浏览器可以正常访问,说明servelt的http协议是通的,因为本次用的是post请求数据的,又是传递json数据的,java读取客户端发送过来的消息都是通过流来接受的,所以传递json数据也是通的,接下来就是字符编码的问题了,客户端发送的中文到tomcat这边来默认的不是utf-8,所以servlet在接受客户端发送过来的请求时候需要设置一下接受的字符编码了,这客户端发送的请求已经接收了,现在就是要给客户端发送数据了,不知道什么问题,反正一开始我客户端接受的数据不论怎么解码,编码都是乱码,最终确认了让tomcat默认发送消息头是默认的编码,然后客户端这边用tomcat默认的字符编码解码,然后再编码,乱码问题解决了;现在来看看截图

1.查看本地网络配置


服务端的代码:

package com.android.test;

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Collection;
import java.util.Date;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.JSONException;
import org.json.JSONObject;

import netscape.javascript.JSObject;

/**
 * Servlet implementation class AndroidServlet
 */
@WebServlet(urlPatterns = "/Login", name = "AndroidServlet", initParams = {
		@WebInitParam(name = "name", value = "huangxudong"), @WebInitParam(name = "pass", value = "123456") })
public class AndroidServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public AndroidServlet() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		

	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response){
		// TODO Auto-generated method stub
		String nString=response.getContentType();
		StringBuffer stringBuffer = new StringBuffer();
		String name = null;
		String pass = null;
		InputStream inputStream = null;
		try {
			request.setCharacterEncoding("UTF-8");
		} catch (UnsupportedEncodingException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		}
		try {
			inputStream = request.getInputStream();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		byte[] bs = new byte[1024];
		int length;
		try {
			while ((length = inputStream.read(bs)) != -1) {
				stringBuffer.append(new String(bs, 0, length,"UTF-8"));
			}
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		if (stringBuffer != null) {
			JSONObject jsonObject = new JSONObject(stringBuffer);
			try {
				name = jsonObject.getString("username");
				pass = jsonObject.getString("password");
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (name != null && pass != null) {
			if (name.equals(getInitParameter("name")) && pass.equals(getInitParameter("pass"))) {
				JSONObject jsonObject = new JSONObject();
				try {
					jsonObject.put("msg", "112");
					jsonObject.put("date", new Date());
					response.setContentType("application/json");
					response.setCharacterEncoding("UTF-8");
					response.getWriter().write(new String(jsonObject.toString().getBytes(),"UTF-8"));
				} catch (JSONException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			
			}
		} else {
			JSONObject jsonObject = new JSONObject();
			
			try {
				jsonObject.put("msg", "123啊是");
				jsonObject.put("date", new Date());
				response.getWriter().write(jsonObject.toString());
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}


由于是进行测试,所以代码质量没有在意..

再来看android端的代码:

package www.hubei.servlet.myapplication;

import android.support.design.widget.TextInputEditText;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private TextInputEditText mTextInputEditText,mTextInputEditText1;
    private Button mButton,mButton1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextInputEditText= (TextInputEditText) findViewById(R.id.et_username);
        mTextInputEditText1= (TextInputEditText) findViewById(R.id.et_userpass);
        mButton= (Button) findViewById(R.id.btn_get);
        mButton1= (Button) findViewById(R.id.btn_post);
        mButton.setOnClickListener(this);
        mButton1.setOnClickListener(this);
    }
    private void doPost(String username,String password) throws IOException, JSONException {
        if (mTextInputEditText.getText().toString().isEmpty()||mTextInputEditText.getText().toString().equals(null)){
            Toast.makeText(this, "用户名不能为空!!!", Toast.LENGTH_SHORT).show();
            return;
        }
        if (mTextInputEditText1.getText().toString().isEmpty()||mTextInputEditText1.getText().toString().equals(null)){
            Toast.makeText(this, "用户名密码不能为空!!!", Toast.LENGTH_SHORT).show();
            return;
        }
        URL url=new URL("http://10.0.2.2:8080/TestHttp/Login");
        HttpURLConnection httpURLConnection= (HttpURLConnection) url.openConnection();
        httpURLConnection.setDoOutput(true);
        httpURLConnection.setDoInput(true);
        httpURLConnection.setRequestMethod("POST");
        httpURLConnection.setConnectTimeout(4000);
        httpURLConnection.setRequestProperty("Content-Type", "application/json");
        httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
        httpURLConnection.setRequestProperty("Charset", "UTF-8");

        OutputStream outputStream=httpURLConnection.getOutputStream();
        JSONObject jsonObject=new JSONObject();
        jsonObject.put("username",username);
        jsonObject.put("password",password);
        String url1=new String(jsonObject.toString().getBytes(),"UTF-8");
        StringBuffer stringBuffer=new StringBuffer();
        outputStream.write(url1.getBytes());
        outputStream.flush();
        if (200==httpURLConnection.getResponseCode()){
            InputStream inputStream=httpURLConnection.getInputStream();
            InputStreamReader streamReader=new InputStreamReader(inputStream,"iso8859-1");
            char []bytes=new char[1024];
            int length;
            while ((length=streamReader.read(bytes))!=-1){
                stringBuffer.append(new String(bytes,0,length));
            }
        }
        Log.e("aaa", new String(stringBuffer.toString().getBytes("iso8859-1"),"UTF-8"));
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btn_get:

                break;
            case R.id.btn_post:
                new Thread(){
                    @Override
                    public void run() {
                        super.run();
                        try {
                            doPost(mTextInputEditText.getText().toString(),mTextInputEditText1.getText().toString());
                        } catch (IOException e) {
                            e.printStackTrace();
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }.start();
                break;
        }
    }
}

由于最后我要在模拟器上进行测试,所以主机地址改成了android模拟器默认的ip地址,这都是要注意的哦。


最后还说下,用谷歌浏览器的开发者工具,可以对web前端进行抓包,然后进行分析,协议分:协议头和body体的,客户端发送http协议请求都是要设置协议头的,服务器返回的时候也是要设置协议头的,具体的协议头可以在开发者工具中查看,顺便截图一下谷歌的开发者工具:




Android 访问权限设置

阅读数 13718

没有更多推荐了,返回首页