AID、Kivy Python安卓apk编程

android函数方法

 

广播可用代码
import android droid
= android.Android() #准备参数 activity = 'com.twofortyfouram.locale.intent.action.FIRE_SETTING' extras = {} extras['de.devmil.minimaltext.locale.extras.VAR_NAME'] = 'test' extras['de.devmil.minimaltext.locale.extras.VAR_TEXT'] = 'Passed' packagename = 'de.devmil.minimaltext' classname = 'de.devmil.minimaltext.locale.LocaleFireReceiver' #代入参数 intent = droid.makeIntent(activity, None, None, extras, None, packagename, classname).result #进行广播 droid.sendBroadcastIntent(intent)


* 定义广播接收者接收短信广播
        public void onReceive(Context context, Intent intent) {
        //拿到广播里携带的短信内容
        Bundle bundle = intent.getExtras();
        Object[] objects = (Object[]) bundle.get("pdus");
        for(Object ob : objects ){
            //通过object对象创建一个短信对象
            SmsMessage sms = SmsMessage.createFromPdu((byte[])ob);
            System.out.println(sms.getMessageBody());
            System.out.println(sms.getOriginatingAddress());
        }
    }

//创建广播接收者对象
        receiver = new ScreenOnOffReceiver();
        //通过IntentFilter对象指定广播接收者接收什么类型的广播
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        filter.addAction(Intent.ACTION_SCREEN_ON);
        
        //注册广播接收者
        registerReceiver(receiver, filter);
* 解除注册广播接收者

unregisterReceiver(receiver);

* 解除注册之后,广播接收者将失去作用


定义广播接收者接收短信广播
        public void onReceive(Context context, Intent intent) {
        //拿到广播里携带的短信内容
        Bundle bundle = intent.getExtras();
        Object[] objects = (Object[]) bundle.get("pdus");
        for(Object ob : objects ){
            //通过object对象创建一个短信对象
            SmsMessage sms = SmsMessage.createFromPdu((byte[])ob);
            System.out.println(sms.getMessageBody());
            System.out.println(sms.getOriginatingAddress());
        }
    }

* 广播接收者的定义

public void onReceive(Context context, Intent intent) {

            //区分接收到的是哪种广播
            String action = intent.getAction();
            //获取广播中包含的应用包
            Uri uri = intent.getData();
            if(action.equals("android.intent.action.PACKAGE_ADDED")){
                System.out.println(uri + "被安装了");
            }
            else if(action.equals("android.intent.action.PACKAGE_REPLACED")){
                System.out.println(uri + "被更新了");
            }
            else if(action.equals("android.intent.action.PACKAGE_REMOVED")){
                System.out.println(uri + "被卸载了");
            }
        }


对广播接收者进行注册
private myreceiver receiver;
private IntentFilter intentFilter;
@Overribe
protected void onCreate(Bundle saveInStanceState){
        super。onCreate(saveInstanceState);
        setContentView(R.Layout。activity_main);
        receiver = new myreceiver();
        intentFilter  = new IntentFilter();
        intentFilter.addAction("android.net.com.CONNECTIVITY_CHANGE");
//当网络发生变化的时候,系统广播回发出值为android.net.com.CONNECTUVUTY_CHANGE这样一条广播
        registerReceiver(receiver,intentFilter);
   
}
发送自定义广播
Intent intent = new Intent();
intent.setAction("com.example.mymessage");
sendBroadcast(intent);
sendOrderBroadcast(intent,null);//发送有序广播
//意思是发送值为com.example.mymessage的这样一条广播
 导入android
droid = android.Android()

title =(" 你的小小" )
content =(" 您的内容" )

droid.dialogCreateAlert(标题,内容)
droid.dialogShow()


getIntent
Object getIntent()
Returns the intent that launched the script.


Intent makeIntent( String action, String uri, String type, JSONObject extras, JSONArray categories, String packagename, String classname, Integer flags)
Create an Intent.
Returns An object representing an Intent
 

 

 

 

SL4A内置API
因sl4a-chinese - ApiReference.wiki访问艰难,故备份一份在此,致谢李璞Leap和他的豆瓣SL4A翻译贴.
仅是部分翻译,完整API见https://github.com/kuri65536/sl4a

在Aid中如何使用
可以通过import Android使用这些API

import android
droid=android.Android()
droid.ttsspeak('hello,world')

 

public void onClick(View view) {
                //创建Intent
                Intent intent = new Intent();
                intent.setAction("com.example.leidong.action.MyReceiver");
                intent.putExtra("msg", "简单的消息");
                //发送广播
                sendBroadcast(intent);
            }

 

public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,
                "接收到的Intent的Action为:" + intent.getAction() + "\n 消息内容是:" + intent.getStringExtra("msg"),
                Toast.LENGTH_LONG).show();
    }

 

//动态注册,在当前activity的生命周期內运行
        /*IntentFilter filter= new IntentFilter(Config.BC_ONE_ACTION);
        MyReiceiver myReiceiver = new MyReiceiver();
        registerReceiver(myReiceiver,filter);*/

Intent intent = new Intent();
        switch (view.getId()){
            case R.id.bt_one:      //发送普通广播
                intent.setAction(Config.BC_ONE_ACTION);
                intent.putExtra("msg","这是普通广播");
                sendBroadcast(intent);
                break;
                //可以先发送 后注册
                IntentFilter filter = new IntentFilter(Config.BC_THREE_ACTION);
                registerReceiver(myReiceiver, filter);
                break;
        }
protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myReiceiver);
    }
public void onReceive(Context context, Intent intent) {

        //获取处理的的广播,普通广播不能获取处理
        //true代表如果前面的接收器没有存放数据,则自动创建一个空的Bundle对象,false则表示如果前面的接收器如果没有存放任何数据则返回null。
        Bundle  bundle= getResultExtras(true);
        System.out.println("接收器1接收到处理的值:"+bundle.getString("msg"));

        System.out.println("接收器1:"+intent.getStringExtra("msg"));
    }
@Override
    public void onReceive(Context context, Intent intent) {
        //Toast.makeText(context,intent.getStringExtra("msg"),Toast.LENGTH_SHORT).show();
        System.out.println("接收器2:"+intent.getStringExtra("msg"));

        abortBroadcast();    //截断广播,不让别的接收器继续接收,有序广播才能成功拦截

        //处理广播
        Bundle bundle = new Bundle();
        bundle.putString("msg","处理过后的广播");
        setResultExtras(bundle); //
    }

 

 

 

 

sendBroadcast
void sendBroadcast( String action, String uri, String type, JSONObject extras, String packagename, String classname)
Send a broadcast.

 

 

makeIntent
Intent makeIntent( String action, String uri, String type, JSONObject extras, JSONArray categories, String packagename, String classname, Integer flags)
Create an Intent.
Returns An object representing an Intent
 

 

startActivityIntent
void startActivityIntent( Intent intent, Boolean wait)
Start Activity using Intent
sendBroadcastIntent
void sendBroadcastIntent( Intent intent)
Send Broadcast Intent
startActivityForResult
Intent startActivityForResult( String action, String uri, String type, JSONObject extras, String packagename, String classname)
Starts an activity and returns the result.
Returns A Map representation of the result Intent.
startActivityForResultIntent
Intent startActivityForResultIntent( Intent intent)
Starts an activity and returns the result.
Returns A Map representation of the result Intent.
getIntent
Object getIntent()
Returns the intent that launched the script.
eventRegisterForBroadcast
boolean eventRegisterForBroadcast( String category, Boolean enqueue)
Registers a listener for a new broadcast signal

eventUnregisterForBroadcast void eventUnregisterForBroadcast(String category) Stop listening
for a broadcast signal
makeToast
void makeToast(final String message)
Displays a short-duration Toast notification.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

二.安装操作
   将Py文件打包成apk文件,江湖上暂有如下3个方法:

       1.通过Buildozer;(在linux环境下实现,集成式框架比较容易实现

       2.通过python for android,(这种可以在windows下实现,但需要安装和配置许多内容,较为繁琐)

       3.通过Kivy Launcher上打包(需要用到谷歌市场,但想在我大天朝嘛....建议你选择别的)
 kivy打包的Buildozer有两种工具,分别是p4a和buildozer,kivydev64使用p4a,kivydev使用buildozer。 buildozer其实是对p4a做了进一步封装,换汤不换药。如果你不想配置recipe和dist之类的参数,可以使用buildozer,但是每次都要复制已经打包成功的项目目录下的.buildozer到要打包的项目目录下,buildozer才不会重复下载sdk和ndk等。而.buildozer目录通常在1G以上,每个项目目录如果都复制一份,不久就会耗尽虚拟机的硬盘空间。所以推荐使用p4a,也就是kivydev64,这个打包环境也是第一个建立在64位ubuntu的环境。

四.镜像文件及链接传送门
   打包环境下载地址http://pan.baidu.com/s/1slweL8T

   Vbox4.3.12下载地址https://pan.baidu.com/s/1c2Ol81E

   vbox4.3.12 Extension pack下载地址https://pan.baidu.com/s/1hsspuIC

   系统 Ubuntu 16.04 64位

   用户名 kivydev 密码 kivydev

   用户名root 密码 root

   已安装增强工具,支持共享文件夹、分辨率调整、宿主机与虚拟机复制粘贴

posted @ 2021-03-08 23:44  pearlcity  阅读(312)  评论(0编辑  收藏  举报