using command lines
http://www.what-could-possibly-go-wrong.com/creating-a-native-android-plugin-for-unity3d/
Wednesday, December 14, 2016
Wednesday, December 7, 2016
android file path convert content:// into file://
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
Uri uri;
uri = resultData.getData();
String path = UriHelpers.getFileForUri(getContext(), uri).getAbsolutePath();
public static File getFileForUri(final Context context, final Uri uri) {
String path = null;
// DocumentProvider
if (DocumentsContract.isDocumentUri(context, uri)) {
// ExternalStorageProvider
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
path = Environment.getExternalStorageDirectory() + "/" + split[1];
}
} else if (isDownloadsDocument(uri)) {
// DownloadsProvider
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris
.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
path = getDataColumn(context, contentUri, null, null);
} else if (isMediaDocument(uri)) {
// MediaProvider
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
Uri contentUri = null;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
final String selection = "_id=?";
final String[] selectionArgs = new String[] {
split[1]
};
path = getDataColumn(context, contentUri, selection, selectionArgs);
}
} else if ("content".equalsIgnoreCase(uri.getScheme())) {
// MediaStore (and general)
path = getDataColumn(context, uri, null, null);
} else if ("file".equalsIgnoreCase(uri.getScheme())) {
// File
path = uri.getPath();
}
if (path != null) {
return new File(path);
}
return null;
}
private static String getDataColumn(Context context, Uri uri, String selection,
String[] selectionArgs) {
Cursor cursor = null;
final String column = "_data";
final String[] projection = {
column
};
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
null);
if (cursor != null && cursor.moveToFirst()) {
final int column_index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(column_index);
}
} finally {
if (cursor != null) {
cursor.close();
}
}
return null;
}
private static boolean isExternalStorageDocument(Uri uri) {
return "com.android.externalstorage.documents".equals(uri.getAuthority());
}
private static boolean isDownloadsDocument(Uri uri) {
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}
private static boolean isMediaDocument(Uri uri) {
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
}
Uri uri;
uri = resultData.getData();
String path = UriHelpers.getFileForUri(getContext(), uri).getAbsolutePath();
public static File getFileForUri(final Context context, final Uri uri) {
String path = null;
// DocumentProvider
if (DocumentsContract.isDocumentUri(context, uri)) {
// ExternalStorageProvider
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
path = Environment.getExternalStorageDirectory() + "/" + split[1];
}
} else if (isDownloadsDocument(uri)) {
// DownloadsProvider
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris
.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
path = getDataColumn(context, contentUri, null, null);
} else if (isMediaDocument(uri)) {
// MediaProvider
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
Uri contentUri = null;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
final String selection = "_id=?";
final String[] selectionArgs = new String[] {
split[1]
};
path = getDataColumn(context, contentUri, selection, selectionArgs);
}
} else if ("content".equalsIgnoreCase(uri.getScheme())) {
// MediaStore (and general)
path = getDataColumn(context, uri, null, null);
} else if ("file".equalsIgnoreCase(uri.getScheme())) {
// File
path = uri.getPath();
}
if (path != null) {
return new File(path);
}
return null;
}
private static String getDataColumn(Context context, Uri uri, String selection,
String[] selectionArgs) {
Cursor cursor = null;
final String column = "_data";
final String[] projection = {
column
};
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
null);
if (cursor != null && cursor.moveToFirst()) {
final int column_index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(column_index);
}
} finally {
if (cursor != null) {
cursor.close();
}
}
return null;
}
private static boolean isExternalStorageDocument(Uri uri) {
return "com.android.externalstorage.documents".equals(uri.getAuthority());
}
private static boolean isDownloadsDocument(Uri uri) {
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}
private static boolean isMediaDocument(Uri uri) {
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
}
Thursday, December 1, 2016
ubuntu git clone gnutls_handshake() failed: Illegal parameter
http://askubuntu.com/questions/186847/error-gnutls-handshake-failed-when-connecting-to-https-servers
Trouble shootings
* Unmet build dependencies: libcurl4-openssl-dev
add "-d" option to override
Trouble shootings
* Unmet build dependencies: libcurl4-openssl-dev
add "-d" option to override
sudo dpkg-buildpackage -rfakeroot -b -d
remove "NO_OPENSSL=1" from debian/rules
Thursday, November 10, 2016
android app read build.prop
String key = "ro.product.name";
String prop = getProp(key);
Log.e(TAG, key + ": [" + prop + "]");
public String getProp(String key) {
Process p = null;
String prop = "";
try {
p = new ProcessBuilder("/system/bin/getprop", key).redirectErrorStream(true).start();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line=br.readLine()) != null) {
prop = line;
}
p.destroy();
} catch (IOException e) {
e.printStackTrace();
}
return prop;
}
Tuesday, November 1, 2016
build android application on command line
http://incise.org/android-development-on-the-command-line.html
http://incise.org/android-development-on-the-command-line.html
Monday, October 31, 2016
build android library on command line
android create lib-project --name UnityLibProject --target 1 --path . --package com.ebmajor.unitylib
- create project : Creates a new Android project.
- create lib-project : Creates a new Android library project.
UnityLibProject.java:
package com.ebmajor.unitylib;
public class UnityLibProject
{
public static float GetValue()
{
return 1.0f;
}
}
build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="AndroidPlugin" default="help">
... default stuff ...
<target name="jar" depends="debug">
<jar
destfile="bin/UnityLib.jar"
basedir="bin/classes" />
</target>
</project>
ant jar
android update lib-project
android update project
android update -h
android update project
android update -h
Monday, October 17, 2016
unity calls method in android plugin
for non-static method in android plugin return void
Calls a Java method on an object (non-static).
jo.Call("setToDefaults");
for non-static method in android plugin return int
AndroidJavaObject jo = new AndroidJavaObject("java.lang.String", "some string");
int hash = jo.Call<int>("hashCode");
for static method in android plugin
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")
jc.CallStatic("UnitySendMessage", "Main Camera", "JavaMessage", "whoowhoo");
Calls a Java method on an object (non-static).
jo.Call("setToDefaults");
for non-static method in android plugin return int
AndroidJavaObject jo = new AndroidJavaObject("java.lang.String", "some string");
int hash = jo.Call<int>("hashCode");
for static method in android plugin
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")
jc.CallStatic("UnitySendMessage", "Main Camera", "JavaMessage", "whoowhoo");
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject context = activity.Call<AndroidJavaObject>("getApplicationContext");
pluginClass.CallStatic("initialize", context);
static public void initialize (Context unityContext){
try {
MyApp.initialize(unityContext);
} catch (NullPointerException e){
Log.d("UnityPlugin", "Null PTR Exception");
e.printStackTrace();
}
}
void OnDestroy() {
int ret;
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject context = activity.Call<AndroidJavaObject>("getApplicationContext");
AndroidJavaClass plugIn = new AndroidJavaClass("com.ebmajor.plugin.MyReceiver");
ret = plugIn.CallStatic<int>("sendExitEvent", context, 10);
Debug.LogError("android lib: sendExitEvent returned: " + ret);
}
public static int sendExitEvent(Context context, int val) {
Intent intent = new Intent();
intent.setAction("com.ebmajor.ACTION");
context.sendBroadcast(intent);
return 1;
}
=========================================================================================
==========================================================================================android plug-in under Unity==========================================================================================package com.le.androidlib;
public class MyActivity extends UnityPlayerActivity {
static public String getArgs() {
return uri_arg;
}
}
==========================================================================================
Unity.cs
==========================================================================================
void Awake()
{
AndroidJavaObject jo = new AndroidJavaObject("com.le.androidlib.MyActivity");
string arg = jo.CallStatic<string>("getArgs"); //string return
Debug.Log("MediaPlayer: arg: " + arg);
jo.CallStatic<int>("getArgsInt"); //int return
jo.CallStatic("flushPendingCommands"); //void return
}
==========================================================================================
Subscribe to:
Posts (Atom)