使用版本:QPython 3c
下载地址:百度搜索QPython 3C开源版即可下载
或关注【产品经理不是经理】gzh,回复【qpython 3c】即可获取下载链接。
注意
# 执行以下方法前,请加上以下代码
from androidhelper import Android
droid=Android()
def jumpQQTeam(qqTeam):
action="android.intent.action.VIEW"
uri=f"mqqapi://card/show_pslcard?src_type=internal&version=1&uin={qqTeam}&card_type=group&source=qrcode"
intent=droid.makeIntent(action=action, uri=uri)
droid.startActivityIntent(intent.result)
def jumpQQ(qq):
action="android.intent.action.VIEW"
uri=f"mqqapi://card/show_pslcard?src_type=internal&source=sharecard&version=1&uin={qq}"
intent=droid.makeIntent(action=action, uri=uri)
droid.startActivityIntent(intent.result)
def shareQQ(content):
action="android.intent.action.SEND"
mime="text/plain"
extras={
"android.intent.extra.SUBJECT":"share",
"android.intent.extra.TEXT":content
}
flags=FLAG_ACTIVITY_NEW_TASK
packageName="com.tencent.mobileqq"
className="com.tencent.mobileqq.activity.JumpActivity"
intent=droid.makeIntent(action=action,type=mime,extras=extras,flags=flags,packagename=packageName,classname=className)
droid.startActivityIntent(intent.result)
def search(content):
# 等同于droid.search(content)
action="android.intent.action.WEB_SEARCH"
extras={
"query":content,
}
intent=droid.makeIntent(action=action, extras=extras)
droid.startActivityIntent(intent.result)
# 启动app
def launchAPP(appName):
flag=False
# 获取用户安装的app
# getInstalledPackages.APPS_ALL = 5 (所有应用)
# getInstalledPackages.APPS_USER = 4 (用户应用,默认)
# getInstalledPackages.APPS_SYSTEM = 3 (系统应用)
# getInstalledPackages.APPS_SYSTEM_UPDATED = 2 (系统已更新应用)
# getInstalledPackages.APPS_SYSTEM_NOT_UPDATED = 1 (系统未更新应用)
installedAPPs=droid.getInstalledPackages(flag=droid.getInstalledPackages.APPS_USER)
if appName not in installedAPPs.result.values():
droid.makeToast(f"{appName}未安装")
return flag
# 获取可启动包名、类名、应用名
apps=droid.getLaunchablePackages(True)
appsInfo=[(k, v.split('|')[0], v.split('|')[1]) for k, v in apps.result.items()]
if appName not in [a[2] for a in appsInfo]:
droid.makeToast(f"{appName}无权限启动")
return flag
packagename=[p[0] for p in appsInfo if p[2] == appName]
classname=[p[1] for p in appsInfo if p[2] == appName]
droid.launch(classname=classname[0], packagename=packagename[0], wait=True)
flag=True
return flag
FLAG_ACTIVITY_NEW_TASK=268435456
def installAPP(apkPath):
"无安装其他app权限"
action="android.intent.action.VIEW"
uri=droid.pathToUri(apkPath).result
mime="application/vnd.android.package-archive"
flags=FLAG_ACTIVITY_NEW_TASK
intent=droid.makeIntent(action=action,uri=uri,type=mime,flags=flags)
droid.startActivityIntent(intent.result)
def unInstallAPP(packageName):
#
action="android.intent.action.DELETE"
uri=f"package:{packageName}"
intent=droid.makeIntent(action=action,uri=uri)
droid.startActivityIntent(intent.result)
def dial(phone):
action="android.intent.action.CALL"
uri=f"tel:{phone}"
intent=droid.makeIntent(action=action,uri=uri)
droid.startActivityIntent(intent.result)
ACTION_SETTINGS android.settings.SETTINGS
ACTION_BLUETOOTH_SETTINGS android.settings.BLUETOOTH_SETTINGS
修改成对应字符串即可
字段列表:
ACTION_SETTINGS 系统设置
ACTION_APN_SETTINGS APN设置
ACTION_LOCATION_SOURCE_SETTINGS 位置和访问信息
ACTION_WIRELESS_SETTINGS 网络设置
ACTION_AIRPLANE_MODE_SETTINGS 无线和网络热点设置
ACTION_SECURITY_SETTINGS 位置和安全设置
ACTION_WIFI_SETTINGS 无线网WIFI设置
ACTION_WIFI_IP_SETTINGS 无线网IP设置
ACTION_BLUETOOTH_SETTINGS 蓝牙设置
ACTION_DATE_SETTINGS 时间和日期设置
ACTION_SOUND_SETTINGS 声音设置
ACTION_DISPLAY_SETTINGS 显示设置——字体大小等
ACTION_LOCALE_SETTINGS 语言设置
ACTION_INPUT_METHOD_SETTINGS 输入法设置
ACTION_USER_DICTIONARY_SETTINGS 用户词典
ACTION_APPLICATION_SETTINGS 应用程序设置
ACTION_APPLICATION_DEVELOPMENT_SETTINGS 应用程序设置
ACTION_QUICK_LAUNCH_SETTINGS 快速启动设置
ACTION_MANAGE_APPLICATIONS_SETTINGS 已下载(安装)软件列表
ACTION_SYNC_SETTINGS 应用程序数据同步设置
ACTION_NETWORK_OPERATOR_SETTINGS 可用网络搜索
ACTION_DATA_ROAMING_SETTINGS 移动网络设置
ACTION_INTERNAL_STORAGE_SETTINGS 手机存储设置
def startSettings(action="android.settings.SETTINGS"):
droid.startActivity(action=action)
FLAG_ACTIVITY_NEW_TASK=268435456
def openFile(path):
action="android.intent.action.VIEW"
uri=droid.pathToUri(path).result
flags=FLAG_ACTIVITY_NEW_TASK
intent=droid.makeIntent(action=action,uri=uri, flags=flags)
droid.startActivityIntent(intent.result)
# 调用文件选择器选择图片
def pickPic():
action="android.intent.action.PICK"
mime="images/*"
packagename="com.android.fileexplorer"
classname="com.android.fileexplorer.activity.FileActivity"
#intent=droid.makeIntent(action=action,type=mime, packagename=packagename, classname=classname)
#f=droid.startActivityForResultIntent(intent.result)
f=droid.startActivityForResult(action=action,type=mime, packagename=packagename, classname=classname)
return f.result
def smsSend(message, phone):
action="android.intent.action.SENDTO"
uri=f"smsto:{phone}"
extras={
"sms_body":message
}
action="android.intent.action.VIEW"
droid.startActivity(action=action,uri=uri, extras=extras)
def backHome():
action="android.intent.action.MAIN"
categories=["android.intent.category.HOME"]
intent=droid.makeIntent(action=action, categories=categories)
droid.startActivityIntent(intent.result)
文章中实例均采用qpython 3c自带sl4a完成,sl4a为提供了丰富的api和安卓交互,更多实例由大家自行探索。
本文由【产品经理不是经理】gzh同步发布,欢迎关注
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL