python3android版_Android QPython3 简易 SL4A 服务:android.py
import os,socket as s
k=os.environ.get
try:
c=s.create_connection((k('AP_HOST'),k('AP_PORT'))).makefile("rw")
except:
print('SL4A服務 連接失敗,重啟 QPython App 即可解決!')
exit()
import collections
from json import dumps,loads
i=0
w,s,c=c.write,c.flush,c.readline
def jsla(method,*params):
global i
w(dumps({'id':i,
'method':method,'params':params})+'\n')
s()
i+=1
return c()
k=k('AP_HANDSHAKE')
if k is not None:
jsla('_authenticate',k)
k=collections.namedtuple('Result','id,result,error')
def rsla(*a):
return loads(jsla(*a))['result']
def esla(*a):
r=loads(jsla(*a))
if r['error']:
raise Exception(r['error'])
else:
return r['result']
def nsla(*a):
return k(**loads(jsla(*a)))
class Android:
def __getattr__(self,method):
def f(*params):
return nsla(method,*params)
setattr(self,method,f)
return f
droid=Android()
__all__=('droid','esla','rsla','jsla','os')
========================
刪改至:SL4A,Damon Kohler,2009。
修改目的:減少冗余,提高速度。
==========說明==========
QPython3 SL4A 簡易服務
導入:
from android import *
jsla(method,*params)
返回Json String:
"{'id':1,'result':'結果','error':null}"
適合不需要返回值且幾乎不出錯的場景
loads(jsla(method,*params))
返回dict:
{'id':1,'result':'結果','error':None}
少用
rsla(method,*params)
僅返回result:
'結果'
忽略錯誤信息,適合很難出錯的場景
esla(method,*params)
程序運行正確時,僅返回result:
'結果'
程序運行錯誤時,拋出異常:
Exception: Error Message
適合容易出錯的場景
import android
android.nsla(method,*params)
完整返回namedtuple:
Result(id=1,result='結果',error=None)
傳統SL4A函數,少用
MyDroid=android.Android()
創建新的SL4A對象
傳統SL4A函數,少用
droid.func:
返回android.nsla('func',*params)
傳統SL4A函數,向舊版兼容
SL4A服務 連接失敗:
方法1:重啟 QPython3 App;
方法2:重新打開 SL4A 服務:
點擊 右上角三個點
點擊 SL4A 服務
點擊 開始 SL4A 服務
原因:一個SL4A程序運行結束后,如果超過1分鐘沒有運行下一個SL4A程序,SL4A服務便會自動關閉。
預防:運行完一個SL4A程序后,最好在1分鐘內運行下一個SL4A程序。
QPython3很多高級功能,包括可視化GUI,都需要用到這個模塊,該模塊是十分基礎的模塊。
總結
以上是生活随笔為你收集整理的python3android版_Android QPython3 简易 SL4A 服务:android.py的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python插件使用教程_Python常
- 下一篇: python面向对象作业_python面