Skip to content

实用

3347字约11分钟

2024-05-28

获取设备标识码

import "android.provider.Settings$Secure"
android_id = Secure.getString(activity.getContentResolver(), Secure.ANDROID_ID)

获取IMEI

import "android.content.Context" 
imei=activity.getSystemService(Context.TELEPHONY_SERVICE).getDeviceId()

控件背景渐变动画

view=控件id
color1 = 0xffFF8080;
color2 = 0xff8080FF;
color3 = 0xff80ffff;
color4 = 0xff80ff80;
import "android.animation.ObjectAnimator"
import "android.animation.ArgbEvaluator"
import "android.animation.ValueAnimator"
import "android.graphics.Color"
colorAnim = ObjectAnimator.ofInt(view,"backgroundColor",{color1, color2, color3,color4})
colorAnim.setDuration(3000)
colorAnim.setEvaluator(ArgbEvaluator())
colorAnim.setRepeatCount(ValueAnimator.INFINITE)
colorAnim.setRepeatMode(ValueAnimator.REVERSE)
colorAnim.start()

精准获取屏幕尺寸

function getScreenPhysicalSize(ctx) 
  import "android.util.DisplayMetrics"
  dm = DisplayMetrics();
  ctx.getWindowManager().getDefaultDisplay().getMetrics(dm);
  diagonalPixels = Math.sqrt(Math.pow(dm.widthPixels, 2) + Math.pow(dm.heightPixels, 2));
  return diagonalPixels / (160 * dm.density);
end
print(getScreenPhysicalSize(activity))

发送邮件

import "android.content.Intent"
i = Intent(Intent.ACTION_SEND)
i.setType("message/rfc822") 
i.putExtra(Intent.EXTRA_EMAIL, {"2113075983@.com"})
i.putExtra(Intent.EXTRA_SUBJECT,"Feedback")
i.putExtra(Intent.EXTRA_TEXT,"Content")
activity.startActivity(Intent.createChooser(i, "Choice"))

自定义默认弹窗标题,消息,按钮的颜色

dialog=AlertDialog.Builder(this)
.setTitle("标题")
.setMessage("消息")
.setPositiveButton("积极",{onClick=function(v) print"点击了积极按钮"end})
.setNeutralButton("中立",nil)
.setNegativeButton("否认",nil)
.show()
dialog.create()


--更改消息颜色
message=dialog.findViewById(android.R.id.message)
message.setTextColor(0xff1DA6DD)

--更改Button颜色
import "android.graphics.Color"
dialog.getButton(dialog.BUTTON_POSITIVE).setTextColor(0xff1DA6DD)
dialog.getButton(dialog.BUTTON_NEGATIVE).setTextColor(0xff1DA6DD)
dialog.getButton(dialog.BUTTON_NEUTRAL).setTextColor(0xff1DA6DD)

--更改Title颜色
import "android.text.SpannableString"
import "android.text.style.ForegroundColorSpan"
import "android.text.Spannable"
sp = SpannableString("标题")
sp.setSpan(ForegroundColorSpan(0xff1DA6DD),0,#sp,Spannable.SPAN_EXCLUSIVE_INCLUSIVE)
dialog.setTitle(sp)

获取手机存储空间

--获取手机内置剩余存储空间
 function GetSurplusSpace()
 fs =  StatFs(Environment.getDataDirectory().getPath())
 return Formatter.formatFileSize(activity, (fs.getAvailableBytes()))
 end

 --获取手机内置存储总空间
 function GetTotalSpace()
 path = Environment.getExternalStorageDirectory()
 stat = StatFs(path.getPath())
 blockSize = stat.getBlockSize()
 totalBlocks = stat.getBlockCount()
 return Formatter.formatFileSize(activity, blockSize * totalBlocks)
 end

获取视频第一帧

function GetVideoFrame(path)
  import "android.media.MediaMetadataRetriever"
  media = MediaMetadataRetriever()
  media.setDataSource(tostring(path))
  return media.getFrameAtTime()
end

选择文件模块

import "android.widget.ArrayAdapter"
import "android.widget.LinearLayout"
import "android.widget.TextView"
import "java.io.File"
import "android.widget.ListView"
import "android.app.AlertDialog"
function ChoiceFile(StartPath,callback)
  --创建ListView作为文件列表
  lv=ListView(activity).setFastScrollEnabled(true)
  --创建路径标签
  cp=TextView(activity)
  lay=LinearLayout(activity).setOrientation(1).addView(cp).addView(lv)
  ChoiceFile_dialog=AlertDialog.Builder(activity)--创建对话框
  .setTitle("选择文件")
  .setView(lay)
  .show()
  adp=ArrayAdapter(activity,android.R.layout.simple_list_item_1)
  lv.setAdapter(adp)
  function SetItem(path)
    path=tostring(path)
    adp.clear()--清空适配器
    cp.Text=tostring(path)--设置当前路径
    if path~="/" then--不是根目录则加上../
      adp.add("../")
    end
    ls=File(path).listFiles()
    if ls~=nil then
      ls=luajava.astable(File(path).listFiles()) --全局文件列表变量
      table.sort(ls,function(a,b)
        return (a.isDirectory()~=b.isDirectory() and a.isDirectory()) or ((a.isDirectory()==b.isDirectory()) and a.Name<b.Name)
      end)
    else
      ls={}
    end
    for index,c in ipairs(ls) do
      if c.isDirectory() then--如果是文件夹则
        adp.add(c.Name.."/")
      else--如果是文件则
        adp.add(c.Name)
      end
    end
  end
  lv.onItemClick=function(l,v,p,s)--列表点击事件
    项目=tostring(v.Text)
    if tostring(cp.Text)=="/" then
      路径=ls[p+1]
    else
      路径=ls[p]
    end

    if 项目=="../" then
      SetItem(File(cp.Text).getParentFile())
    elseif 路径.isDirectory() then
      SetItem(路径)
    elseif 路径.isFile() then
      callback(tostring(路径))
      ChoiceFile_dialog.hide()
    end

  end

  SetItem(StartPath)
end

--ChoiceFile(StartPath,callback)
--第一个参数为初始化路径,第二个为回调函数
--原创

选择路径模块

require "import"
import "android.widget.ArrayAdapter"
import "android.widget.LinearLayout"
import "android.widget.TextView"
import "java.io.File"
import "android.widget.ListView"
import "android.app.AlertDialog"
function ChoicePath(StartPath,callback)
  --创建ListView作为文件列表
  lv=ListView(activity).setFastScrollEnabled(true)
  --创建路径标签
  cp=TextView(activity)
  lay=LinearLayout(activity).setOrientation(1).addView(cp).addView(lv)
  ChoiceFile_dialog=AlertDialog.Builder(activity)--创建对话框
  .setTitle("选择路径")
  .setPositiveButton("OK",{
  onClick=function()
  callback(tostring(cp.Text))
  end})
.setNegativeButton("Canel",nil)
  .setView(lay)
  .show()
  adp=ArrayAdapter(activity,android.R.layout.simple_list_item_1)
  lv.setAdapter(adp)
  function SetItem(path)
    path=tostring(path)
    adp.clear()--清空适配器
    cp.Text=tostring(path)--设置当前路径
    if path~="/" then--不是根目录则加上../
      adp.add("../")
    end
    ls=File(path).listFiles()
    if ls~=nil then
      ls=luajava.astable(File(path).listFiles()) --全局文件列表变量
      table.sort(ls,function(a,b)
        return (a.isDirectory()~=b.isDirectory() and a.isDirectory()) or ((a.isDirectory()==b.isDirectory()) and a.Name<b.Name)
      end)
    else
      ls={}
    end
    for index,c in ipairs(ls) do
      if c.isDirectory() then--如果是文件夹则
        adp.add(c.Name.."/")
      end
    end
  end
  lv.onItemClick=function(l,v,p,s)--列表点击事件
    项目=tostring(v.Text)
    if tostring(cp.Text)=="/" then
      路径=ls[p+1]
    else
      路径=ls[p]
    end

    if 项目=="../" then
      SetItem(File(cp.Text).getParentFile())
    elseif 路径.isDirectory() then
      SetItem(路径)
    elseif 路径.isFile() then
      callback(tostring(路径))
      ChoiceFile_dialog.hide()
    end

  end

  SetItem(StartPath)
end


import "android.os.*"
ChoicePath(Environment.getExternalStorageDirectory().toString(),
function(path)
print(path)
end)

--第一个参数为初始化路径,第二个为回调函数
--原创

获取视图中的所有文本

function GetAllText(view)
textTable={}
function GetText(Parent)
local number=Parent.getChildCount()
for i=0,number do
local view=Parent.getChildAt(i)
if pcall(function()view.addView(TextView(activity))end) then
GetText(view)
elseif pcall(function()view.getText()end) then
table.insert(textTable,tostring(view.Text))
end
end
end
GetText(view)
return textTable
end

print(table.unpack(GetAllText(Parent)))

控件圆角

function CircleButton(view,InsideColor,radiu)
  import "android.graphics.drawable.GradientDrawable"
  drawable = GradientDrawable() 
  drawable.setShape(GradientDrawable.RECTANGLE) 
  drawable.setColor(InsideColor)
  drawable.setCornerRadii({radiu,radiu,radiu,radiu,radiu,radiu,radiu,radiu});
  view.setBackgroundDrawable(drawable)
end
角度=50
控件id=ed
控件颜色=0xFF09639C
CircleButton(控件id,控件颜色,角度)

匹配汉字

function filter_spec_chars(s)
	local ss = {}
	for k = 1, #s do
		local c = string.byte(s,k)
		if not c then break end
		if (c>=48 and c<=57) or (c>= 65 and c<=90) or (c>=97 and c<=122) then
			if not string.char(c):find("%w") then
   table.insert(ss, string.char(c))
	end
 	elseif c>=228 and c<=233 then
			local c1 = string.byte(s,k+1)
			local c2 = string.byte(s,k+2)
			if c1 and c2 then
				local a1,a2,a3,a4 = 128,191,128,191
				if c == 228 then a1 = 184
				elseif c == 233 then a2,a4 = 190,c1 ~= 190 and 191 or 165
				end
				if c1>=a1 and c1<=a2 and c2>=a3 and c2<=a4 then
					k = k + 2
					table.insert(ss, string.char(c,c1,c2))
				end
			end
		end
	end
	return table.concat(ss)
end
print(filter_spec_chars("A1B2汉C3D4字E5F6,,,"))
--来源网络,加了个if过滤掉英文与数字,使其只捕获中文

播放音乐与视频

import "android.media.MediaPlayer"
mediaPlayer =  MediaPlayer()

--初始化参数
mediaPlayer.reset()

--设置播放资源
mediaPlayer.setDataSource("storage/sdcard0/a.mp3")

--开始缓冲资源
mediaPlayer.prepare()

--是否循环播放该资源
mediaPlayer.setLooping(true)

--缓冲完成的监听
mediaPlayer.setOnPreparedListener(MediaPlayer.OnPreparedListener() {
    onPrepared=function(mediaPlayer
        mediaPlayer.start()
   end});

--是否在播放
mediaPlayer.isPlaying()

--暂停播放
mediaPlayer.pause()

--从30位置开始播放
mediaPlayer.seekTo(30)

--停止播放
mediaPlayer.stop()






--播放视频
--视频的播放与音乐播放过程一样:

--先创建一个媒体对象
import "android.media.MediaPlayer"
mediaPlayer =  MediaPlayer()
--初始化参数
mediaPlayer.reset()

--设置播放资源
mediaPlayer.setDataSource("storage/sdcard0/a.mp4")

--拿到显示的SurfaceView
sh = surfaceView.getHolder()
sh.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS)

--设置显示SurfaceView
mediaPlayer.setDisplay(sh)

--设置音频流格式
mediaPlayer.setAudioStreamType(AudioManager.Stream_Music)

--开始缓冲资源
mediaPlayer.prepare()

--缓冲完成的监听
mediaPlayer.setOnPreparedListener(MediaPlayer.OnPreparedListener{
   onPrepared=function(mediaPlayer)
		--开始播放
        mediaPlayer.start()
   end
});

--释放播放器
mediaPlayer.release()


--非原创

获取系统SDK,Android版本及设备型号

device_model = Build.MODEL --设备型号 

version_sdk = Build.VERSION.SDK --设备SDK版本 

version_release = Build.VERSION.RELEASE --设备的系统版本

控件颜色修改

import "android.graphics.PorterDuffColorFilter"
import "android.graphics.PorterDuff"

--修改按钮颜色
button.getBackground().setColorFilter(PorterDuffColorFilter(0xFFFB7299,PorterDuff.Mode.SRC_ATOP))

--修改编辑框颜色
edittext.getBackground().setColorFilter(PorterDuffColorFilter(0xFFFB7299,PorterDuff.Mode.SRC_ATOP));

--修改Switch颜色
switch.ThumbDrawable.setColorFilter(PorterDuffColorFilter(0xFFFB7299,PorterDuff.Mode.SRC_ATOP));
switch.TrackDrawable.setColorFilter(PorterDuffColorFilter(0xFFFB7299,PorterDuff.Mode.SRC_ATOP))

--修改ProgressBar颜色
progressbar.IndeterminateDrawable.setColorFilter(PorterDuffColorFilter(0xFFFB7299,PorterDuff.Mode.SRC_ATOP))

--修改SeekBar滑条颜色
seekbar.ProgressDrawable.setColorFilter(PorterDuffColorFilter(0xFFFB7299,PorterDuff.Mode.SRC_ATOP))
--修改SeekBar滑块颜色
seekbar.Thumb.setColorFilter(PorterDuffColorFilter(0xFFFB7299,PorterDuff.Mode.SRC_ATOP))

修改对话框按钮颜色

function DialogButtonFilter(dialog,button,WidgetColor)
if Build.VERSION.SDK_INT >= 21 then
import "android.graphics.PorterDuffColorFilter"
import "android.graphics.PorterDuff"
if button==1 then
dialog.getButton(dialog.BUTTON_POSITIVE).setTextColor(WidgetColor)
elseif button==2 then
dialog.getButton(dialog.BUTTON_NEGATIVE).setTextColor(WidgetColor)
elseif button==3 then
dialog.getButton(dialog.BUTTON_NEUTRAL).setTextColor(WidgetColor)
end
end
end
--第一个参数为对话框的变量
--第二个参数为1时,则修改POSITIVE按钮颜色,为二则修改NEGATIVE按钮颜色,为三则修改NEUTRAL按钮颜色
--第三个参数为要修改成的颜色

查询本地所有视频

function QueryAllVideo()
import "android.provider.MediaStore"
cursor = activity.ContentResolver
mImageUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
mCursor = cursor.query(mImageUri,nil,nil,nil,MediaStore.Video.Media.DATE_TAKEN)
mCursor.moveToLast()
VideoTable={}
while mCursor.moveToPrevious() do
   path = mCursor.getString(mCursor.getColumnIndex(MediaStore.Video.Media.DATA))
   table.insert(VideoTable,tostring(path))
end
mCursor.close()
return VideoTable
end
--返回一个表

查询本地所有图片

function QueryAllImage()
import "android.provider.MediaStore"
cursor = activity.ContentResolver
mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
mCursor = cursor.query(mImageUri,nil,nil,nil,MediaStore.Images.Media.DATE_TAKEN)
mCursor.moveToLast()
imageTable={}
while mCursor.moveToPrevious() do
   path = mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA))
   table.insert(imageTable,tostring(path))
end
mCursor.close()
return imageTable
end
--返回一个表

递归查找文件

function outPath(ret) 
for i,p in pairs(luajava.astable(ret)) do
print(p)
end
end
function find(catalog,name)
 local n=0
 local t=os.clock()
 local ret={}
 require "import"
 import "java.io.File" 
 import "java.lang.String"
 function FindFile(catalog,name)
   local name=tostring(name)
   local ls=catalog.listFiles() or File{}
   for 次数=0,#ls-1 do
     --local 目录=tostring(ls[次数])
     local f=ls[次数]
     if f.isDirectory() then--如果是文件夹则继续匹配
       FindFile(f,name)
     else--如果是文件则
       n=n+1
       if n%1000==0 then
         print(n,os.clock()-t)
       end
      local nm=f.Name
       if string.find(nm,name) then
         --thread(insert,目录)
         table.insert(ret,tostring(f))
       end
     end
   luajava.clear(f)
   end
 end
 FindFile(catalog,name)
 call("outPath",ret)
end

import "java.io.File"

catalog=File("/sdcard/AndroLua")
name=".j?pn?g"
thread(find,catalog,name)

获取手机内置存储路径

Environment.getExternalStorageDirectory().toString()

获取已安装程序的包名、版本号、最后更新时间、图标、应用名称

function GetAppInfo(包名)
  import "android.content.pm.PackageManager"
  local pm = activity.getPackageManager();
  local 图标 = pm.getApplicationInfo(tostring(包名),0)
  local 图标 = 图标.loadIcon(pm);
  local pkg = activity.getPackageManager().getPackageInfo(包名, 0); 
  local 应用名称 = pkg.applicationInfo.loadLabel(activity.getPackageManager())
  local 版本号 = activity.getPackageManager().getPackageInfo(包名, 0).versionName
  local 最后更新时间 = activity.getPackageManager().getPackageInfo(包名, 0).lastUpdateTime
  local cal = Calendar.getInstance();
  cal.setTimeInMillis(最后更新时间); 
  local 最后更新时间 = cal.getTime().toLocaleString()
  return 包名,版本号,最后更新时间,图标,应用名称
end

获取指定安装包的包名,图标,应用名

import "android.content.pm.PackageManager"
import "android.content.pm.ApplicationInfo"
function GetApkInfo(archiveFilePath)
pm = activity.getPackageManager()
info = pm.getPackageArchiveInfo(archiveFilePath, PackageManager.GET_ACTIVITIES); 
if info ~= nil then
  appInfo = info.applicationInfo;
 appName = tostring(pm.getApplicationLabel(appInfo))
  packageName = appInfo.packageName; --安装包名称 
  version=info.versionName; --版本信息 
   icon = pm.getApplicationIcon(appInfo);--图标
end
return packageName,version,icon
end

获取某程序是否安装

if pcall(function() activity.getPackageManager().getPackageInfo("包名",0) end) then
  print("安装了")
else
  print("没安装")
end

设置TextView字体风格

import "android.graphics.Paint"
--设置中划线
id.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG)
--设置下划线
id.getPaint().setFlags(Paint. UNDERLINE_TEXT_FLAG )
--设置加粗
id.getPaint().setFakeBoldText(true)
--设置斜体
id.getPaint().setTextSkewX(0.2)

--设置TypeFace
import "android.graphics.Typeface"
id.getPaint().setTypeface()
--参数列表
Typeface.DEFAULT 默认字体
Typeface.DEFAULT_BOLD 加粗字体
Typeface.MONOSPACE monospace字体
Typeface.SANS_SERIF sans字体
Typeface.SERIF serif字体

缩放图片

function rotateToFit(bm,degrees)
    import "android.graphics.Matrix"
    import "android.graphics.Bitmap"
    width = bm.getWidth()
    height = bm.getHeight()
    matrix =  Matrix()
    matrix.postRotate(degrees)
    bmResult = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true)
    return bmResult
  end
bm=loadbitmap(图片路径)
缩放级别=2
rotateToFit(bm,degrees)
--非原创

获取运营商名称

import "android.content.Context" 
运营商名称 = this.getSystemService(Context.TELEPHONY_SERVICE).getNetworkOperatorName()
print(运营商名称)
--添加权限   READ_PHONE_STATE

Drawable着色

function ToColor(path,color)
 local  aa=BitmapDrawable(loadbitmap(tostring(path)))
   aa.setColorFilter(PorterDuffColorFilter(color,PorterDuff.Mode.SRC_ATOP))
return aa
end

保存图片到本地

--保存图片到本地
function SavePicture(name,bm)
  if bm then
    import "java.io.FileOutputStream"
    import "java.io.File"
    import "android.graphics.Bitmap"
    name=tostring(name)
    f = File(name)
    out = FileOutputStream(f)
    bm.compress(Bitmap.CompressFormat.PNG,90, out)
    out.flush()
    out.close()
    return true
   else
    return false
  end
end

--设置"保存按钮的单机事件
a.onClick=function(v)
  --获取ImageView的图片
  b.setDrawingCacheEnabled(true);
  bm=b.getDrawingCache();

  --设置保存路径(好像不能保存在sdcard内的文件夹里)
  name="/storage/emulated/0/"..System.currentTimeMillis()..".png"

  --执行保存模块
  print("保存成功!")
  SavePicture(name,bm)

end

调用应用商店搜索应用

import "android.content.Intent"
import "android.net.Uri"
intent = Intent("android.intent.action.VIEW")
intent .setData(Uri.parse( "market://details?id="..activity.getPackageName()))
this.startActivity(intent)

分享

--分享文件
function Sharing(path)
  import "android.webkit.MimeTypeMap"
  import "android.content.Intent"
  import "android.net.Uri"
  import "java.io.File"
  FileName=tostring(File(path).Name)
  ExtensionName=FileName:match("%.(.+)")
  Mime=MimeTypeMap.getSingleton().getMimeTypeFromExtension(ExtensionName)
  intent = Intent();
  intent.setAction(Intent.ACTION_SEND);
  intent.setType(Mime);
  file = File(path);
  uri = Uri.fromFile(file);
  intent.putExtra(Intent.EXTRA_STREAM,uri);
  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  activity.startActivity(Intent.createChooser(intent, "分享到:"));
  end

--分享文字
text="分享的内容" 
intent=Intent(Intent.ACTION_SEND); 
intent.setType("text/plain"); 
intent.putExtra(Intent.EXTRA_SUBJECT, "分享"); 
intent.putExtra(Intent.EXTRA_TEXT, text); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
activity.startActivity(Intent.createChooser(intent,"分享到:"));

调用其它程序打开文件

function OpenFile(path)
  import "android.webkit.MimeTypeMap"
  import "android.content.Intent"
  import "android.net.Uri"
  import "java.io.File"
  FileName=tostring(File(path).Name)
  ExtensionName=FileName:match("%.(.+)")
  Mime=MimeTypeMap.getSingleton().getMimeTypeFromExtension(ExtensionName)
  if Mime then 
    intent = Intent(); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intent.setAction(Intent.ACTION_VIEW); 
    intent.setDataAndType(Uri.fromFile(File(path)), Mime); 
    activity.startActivity(intent);
  else
    Toastc("找不到可以用来打开此文件的程序")
  end
end

图片圆角

function GetRoundedCornerBitmap(bitmap,roundPx) 
  import "android.graphics.PorterDuffXfermode"
  import "android.graphics.Paint"
  import "android.graphics.RectF"
  import "android.graphics.Bitmap"
  import "android.graphics.PorterDuff$Mode"
  import "android.graphics.Rect"
  import "android.graphics.Canvas"
  import "android.util.Config"
  width = bitmap.getWidth()
  output = Bitmap.createBitmap(width, width,Bitmap.Config.ARGB_8888)
  canvas = Canvas(output); 
  color = 0xff424242; 
  paint = Paint()
  rect = Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 
  rectF = RectF(rect); 
  paint.setAntiAlias(true);
  canvas.drawARGB(0, 0, 0, 0); 
  paint.setColor(color); 
  canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 
  paint.setXfermode(PorterDuffXfermode(Mode.SRC_IN)); 
  canvas.drawBitmap(bitmap, rect, rect, paint); 
  return output; 
end
import "android.graphics.drawable.BitmapDrawable"
圆角弧度=50
bitmap=loadbitmap(picturePath)
RoundPic=GetRoundedCornerBitmap(bitmap)

一键加群与QQ聊天

import "android.net.Uri"
import "android.content.Intent"
--加群
url="mqqapi://card/show_pslcard?src_type=internal&version=1&uin=383792635&card_type=group&source=qrcode"
activity.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))

--QQ聊天
url="mqqwpa://im/chat?chat_type=wpa&uin=2113075983"
activity.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))

发送短信

--后台发送短信
 require "import"
 import "android.telephony.*"
 SmsManager.getDefault().sendTextMessage(tostring(号码), nil, tostring(内容), nil, nil)

--调用系统发送短信
import "android.content.Intent"
import "android.net.Uri"
uri = Uri.parse("smsto:"..号码)
intent = Intent(Intent.ACTION_SENDTO, uri)
intent.putExtra("sms_body",内容)
intent.setAction("android.intent.action.VIEW")
activity.startActivity(intent)

判断数组中是否存在某个值

function Table_exists(tables,value)
for index,content in pairs(tables) do
if content:find(value) then
return true
end
end
end

字符串操作

strings="左中右"

--取字符串左边
=strings:match("(.+)中")


--取字符串中间
=strings:match("左(.-)右")


--取字符串右边
=strings:match("(.+)右")

--替换
string.gsub(原字符串,替换的字符串,替换成的字符串)

--匹配子串位置
起始位置,结束位置=string.find(字符串,子串)


--按位置捕获字符串
string.sub(字符串,子串起始位置,子串结束位置)

剪切板操作

import "android.content.Context" 
--导入类

a=activity.getSystemService(Context.CLIPBOARD_SERVICE).getText() 
--获取剪贴板 

activity.getSystemService(Context.CLIPBOARD_SERVICE).setText(edit.Text) 
--写入剪贴板

各种事件

function main(...)
  --...是newActivity传递过来的参数。
  print("入口函数",...)
end

function onCreate()
  print("窗口创建")
end

function onStart()
  print("活动开始")
end

function onResume()
  print("返回程序")
end

function onPause()
  print("活动暂停")
end

function onStop()
  print("活动停止")
end

function onDestroy()
  print("程序已退出")
end

function onResult(name,...)
  --name:返回的活动名称
  --...:返回的参数
  print("返回活动",name,...)
end

function onCreateOptionsMenu(menu)
  --menu:选项菜单。
  menu.add("菜单")
end

function onOptionsItemSelected(item)
  --item:选中的菜单项
  print(item.Title)
end

function onConfigurationChanged(config)
  --config:配置信息
  print("屏幕方向关闭")
end

function onKeyDown(keycode,event)
  --keycode:键值
  --event:事件
  print("按键按下",keycode)
end

function onKeyUp(keycode,event)
  --keycode:键值
  --event:事件
  print("按键抬起",keycode)
end

function onKeyLongPress(keycode,event)
  --keycode:键值
  --event:事件
  print("按键长按",keycode)
end

function onTouchEvent(event)
  --event:事件
  print("触摸事件",event)
end

function onKeyDown(c,e)
  if c==4 then
--返回键事件
end
end


id.onClick=function()
--控件被单击
end

id.onLongClick=function()
--控件被长按
end


id.onItemClick=function(p,v,i,s)
--列表项目被单击
项目=v.Text
return true
end

id.onItemLongClick=function(p,v,i,s)
--列表项目被长按
项目=v.Text
return true
end


id.onItemLongClick=function(p,v,i,s)
--列表项目被长按
项目=v.Text
return true
end

--Spinner的项目单击事件
id.onItemSelected=function(l,v,p,i) 
项目=v.Text
end

--ExpandableListView的父项目与子项目单击事件
id.onGroupClick=function(l,v,p,s)
  print(v.Text..":GroupClick")
end

id.onChildClick=function(l,v,g,c)
  print(v.Text..":ChildClick")
end

Shell执行

function exec(cmd)
local p=io.popen(string.format('%s',cmd))
local s=p:read("*a")
p:close()
return s
end

print(exec("echo  ...."))

部分常用命令:
--删除文件或文件夹
rm -r /路径

--复制文件或文件夹
cp -r inpath outpath

--移动文件或文件夹
mv -r inpath outpath

--挂载系统目录
mount -o remount,rw path

--修改系统文件权限
chmod 755 /system/build.prop

--重启
reboot  

--关机
reboot -p

--重启至recovery
reboot recovery