This example demonstrates how a phone call could be invoked as part of a Lua callback.
In order for this example to work, the AndroidManifest.xml file must be changed to give
permission for calls to be made:
%<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
-- Log message routine to route diagnostic messages
local function lm(msg)
print(msg)
end
-- Call a selected phone number using the Android API
-- Input is the string number value that is to be called
local function call_phone_number(number)
if(luajava == nil) then
lm("No luajava Lua object")
return
end
local na = luajava.nativeActivity()
if(na == nil) then
lm("No native activity available")
return
end
local uriClass = luajava.bindClass("android.net.Uri")
if(uriClass == nil) then
lm("No java.lang.String object")
return
end
local phoneURI = uriClass:parse("tel:" .. tostring(number))
if(phoneURI == nil) then
lm("No java.net.URI object")
return
end
local intentClass = luajava.bindClass("android.content.Intent")
if(intentClass == nil) then
lm("No intent class")
return
end
local intent = luajava.newInstance("android.content.Intent",
intentClass.ACTION_CALL, phoneURI)
if(intent == nil) then
lm("No intent object")
return
end
lm("Calling " .. number)
na:startActivity(intent)
end
This example demonstrates how to create a new instance of a nested inner class of a Java class. This example gets media metadata from the android.provider.MediaStore.Audio.Media class, which is a nested class of android.provider.MediaStore.Audio, which in turn is a nested class of android.provider.MediaStore.
-- In order to pass array's to any of the Android Java API's we must explicitly create
-- a Java array from a Lua table and this function covers that work.
function make_array(dataClass, values)
local arrayClass = luajava.bindClass("java.lang.reflect.Array")
if(arrayClass == nil) then
print("Can't get array class")
return nil
end
local newTypedArray = arrayClass:newInstance(dataClass, #values)
if(newTypedArray == nil) then
print("Can't get array class")
return nil
end
for i=1,#values do
arrayClass:set(newTypedArray, i-1, values[i])
end
return newTypedArray
end
function get_album_files(album_id)
if (luajava == nil) then
return
end
if (luajava.bindClass == nil) then
return
end
local na = luajava.nativeActivity()
local mediastore = luajava.newInstance("android.provider.
MediaStore$Audio$Media")
local externalURI = mediastore.EXTERNAL_CONTENT_URI
local columns = {}
columns[1] = mediastore.TITLE_KEY
columns[2] = mediastore.DURATION
columns[3] = mediastore.TITLE
local stringClass = luajava.bindClass("java.lang.String")
local array = make_array(stringClass, columns)
local where = mediastore.ALBUM_KEY .. "=?"
local what = {}
what[1] = album_id
local whatArray = make_array(stringClass, what)
local cursor = na:managedQuery(externalURI, array, where, whatArray, nil);
local res = cursor_to_table(cursor)
return res
end