Android jar包裡面有assets目錄下有檔案,APP的assets裡面也有檔案,如何讀呢?
阿新 • • 發佈:2018-11-17
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(); }
}
如果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(); }
}