需要开发一个测试程序apk工具,要求是电脑输入命令开启APP,并且使得测试的结果为JSON格式的文本存放。思路流程:
(1)Action的隐式调用:
1、主要注意的是清单中AndroidManifest.xml中,在需要隐式调用的Activity的<intent-filter>添加 <category android:name="android.intent.category.DEFAULT" /><category android:name="myCategory" />,同时写好需要用到的Action,这里我用<action android:name="com..test.json" />来启动app。(也可以在代码上添加Action)
2、还需要在清单中,添加权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />//可写手机内存
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>//可读手机内存
(2)JSON格式的书写:需要JSONStringer这个类来添加,还有键值对来标识。例子:
{
"Type":"test",
"Result":"ok",
"Number":"1738849455",
}
java代码如下:
JSONStringer mJsonStringer=new JSONStringer();
mJsonStringer.object();//开始
mJsonStringer.key("Type");
mJsonStringer.value("test");
mJsonStringer.key("Result");
mJsonStringer.value("ok");
mJsonStringer.key("Sn");
mJsonStringer.value("1738849455");
mJsonStringer.endObject();//结束
接下来贴出代码:
1、清单AndroidManifest.xml代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.json"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.json.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="com.gree.test.json" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="myCategory" />
</intent-filter>
</activity>
</application>
</manifest>
2、类KeyInfo:
package com.example.json;
public class KeyInfo {
String sn;
String type;
boolean result;
public void setSN(String sn){
this.sn=sn;
}
public Object getSN() {
return sn;
}
public void isResult(boolean result) {
this.result=result;
}
public boolean getResult(){
return result;
}
public void setType(String type){
this.type=type;
}
public Object getType() {
return type;
}
}
3、类MyJsonWriter:
package com.example.json;
import java.util.ArrayList;
import org.json.JSONException;
import org.json.JSONStringer;
public class MyJsonWriter {
private ArrayList<KeyInfo> mKeyInfos;
private String mjsonData ;
public MyJsonWriter(ArrayList<KeyInfo> keyInfos){
this.mKeyInfos=keyInfos;
}
public String TranstJsonData(){
JSONStringer mJsonStringer=new JSONStringer();
try {
for(int i=0;i<mKeyInfos.size();i++){
KeyInfo keyInfo=mKeyInfos.get(i);
mJsonStringer.object();
mJsonStringer.key("Type");
mJsonStringer.value(keyInfo.getType());
mJsonStringer.key("Result");
mJsonStringer.value(keyInfo.getResult()?"ok":"failure");
mJsonStringer.key("Sn");
mJsonStringer.value(keyInfo.getSN());
mJsonStringer.endObject();
}
} catch (JSONException e) {
e.printStackTrace();
}
return mjsonData=mJsonStringer.toString();//JSON格式转换到String
}
}
4、主代码MainActivity:
package com.example.json;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.util.Log;
public class MainActivity extends Activity {
private String mString;
private String tag="json test";
private MyJsonWriter mMyJsonWriter;
private KeyInfo mKeyInfo;
private ArrayList<KeyInfo> folks ;
private File mFile;
private File mDir;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
folks = new ArrayList<KeyInfo>();
mKeyInfo = new KeyInfo();
String serialName=android.os.Build.SERIAL;
mKeyInfo.setType("KeyTest");
mKeyInfo.setSN(serialName);
mKeyInfo.isResult(true);
folks.add(mKeyInfo);
mMyJsonWriter = new MyJsonWriter(folks);
// String mTimeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());
mFile = new File(getDir(),"key_test_result.json");
Log.d(tag, "----------->"+serialName);
mString= mMyJsonWriter.TranstJsonData();
writeData(mString, mFile);
}
private File getDir(){
mDir = new File(Environment.getExternalStorageDirectory()+"/Json");//手机内存根目录下新建文件夹JSON
if (mDir.exists()) {
return mDir;
} else {
mDir.mkdirs();
return mDir;
}
}
private void writeData(String jsonData,File file) {
try {
// String mJsonData=new String( jsonData.getBytes(),"UTF-8");
BufferedReader reader=new BufferedReader(new StringReader(jsonData));//<span style="font-family: Arial, Helvetica, sans-serif;">BufferedReader缓存</span><pre name="code" class="java">jsonData内容
BufferedWriter writer=new BufferedWriter(new FileWriter(file));//BufferedReader写入内容到指定文件
int len=0;char[] buffer=new char[1024]; while((len=reader.read(buffer))!=-1){writer.write(buffer, 0, len);}writer.flush();writer.close();reader.close();} catch (IOException e) {e.printStackTrace();}}}
5、电脑输入启动测试程序的命令:adb shell am start -a com.test.json