jar 包中可以写 assets文件夹, APP里面同时也可以写assets,但是只要assets下面的文件不同名就可以了,忒棒 !!!
如果assets目录下有文件的,导出jar时需要注意,把assets目录勾选上
package com.jds.readxml;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import carnetapp.mms.command.factory.CommandSendHelper;
import android.support.v7.app.ActionBarActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.content.res.AssetManager;
import android.os.Bundle;
public class MainActivity extends ActionBarActivity implements OnClickListener{
private InputStream inputStream;
List<String> invokePermission = new ArrayList<String>();
List<String> callbackPermission = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn_send).setOnClickListener(this);
loadPermissions();
boolean result = checkPermission(CheckAction.INVOKE,
"255");
if (result) {
Log.d("per", "congratulations you have the permission");
} else {
Log.d("per", "you don't have the permission to invoke this method");
}
}
/**
* 加载权限表
*/
private void loadPermissions() {
AssetManager assetManager = getAssets();
try {
inputStream = assetManager.open("permission2.xml");
if (inputStream != null) {
parseXML(inputStream);
}
for (int i = 0; i < invokePermission.size(); i++) {
System.out.println("request method " + invokePermission.get(i));
Log.d("per", "request method " + invokePermission.get(i));
}
for (String s : callbackPermission) {
System.out.println("callback method " + s);
Log.d("per", "callback method " + s);
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 检查权限
*/
private boolean checkPermission(CheckAction action, String needPermission) {
if (TextUtils.isEmpty(needPermission.trim()))
return false;
if (action == CheckAction.INVOKE) {
// 调用方法
for (int i = 0; i < invokePermission.size(); i++) {
if (needPermission.endsWith(invokePermission.get(i).trim())) {
return true;
}
}
} else {
// 设置回调监听
// 调用方法
for (int i = 0; i < callbackPermission.size(); i++) {
if (needPermission.endsWith(callbackPermission.get(i).trim())) {
return true;
}
}
}
return false;
}
/**
*
* @param 解析XML文件
* @return
*/
private boolean parseXML(InputStream in) {
if (in == null)
return false;
List<String> tempList = null; // 临时的数据集
String method = null;
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(in, "UTF-8");
// 产生第一个事件
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
// 判断当前事件是否为文档开始事件
case XmlPullParser.START_DOCUMENT:
tempList = new ArrayList<String>(); // 初始化权限集合
break;
// 判断当前事件是否为标签元素开始事件
case XmlPullParser.START_TAG:
if (parser.getName().equals("request")) { // 判断开始标签元素是否是book
if (tempList != null && tempList.size() > 0) {
tempList.clear();
}
} else if (parser.getName().equals("callback")) {
if (tempList != null && tempList.size() > 0) {
tempList.clear();
}
} else if (parser.getName().equals("method")) { // 判断开始标签元素是否是method
eventType = parser.next();// 让解析器指向method属性的值
// 得到method标签的属性值
method = parser.getText();
}
break;
// 判断当前事件是否为标签元素结束事件
case XmlPullParser.END_TAG:
if (parser.getName().equals("request")) {
if (tempList != null) {
invokePermission.addAll(tempList);
}
} else if (parser.getName().equals("callback")) {
if (tempList != null) {
callbackPermission.addAll(tempList);
}
} else {
// 得到方法对象
tempList.add(method);
}
break;
}
// 进入下一个元素并触发相应事件
eventType = parser.next();
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
@Override
public void onClick(View v) {
CommandSendHelper.getInstance().askForBTConnectionState();
}
}