因此,在Android Studio中,我正在开发一个使用网络刮刀库来扫描网页的应用,当它识别出网页上的某个字符串时,它会自动拨打电话。但是,因为此代码只是在我的main方法中运行,所以当我尝试调用startActivity函数时出现编译错误。
我是android开发的新手,但是从目前为止我收集到的内容来看,startActivity函数似乎只能从某种类型的Listener内部的方法调用。那么,最好的解决方法是什么?谢谢!
以下是我所说的方法:
public static void main(String[] args) throws ResponseException, NotFound {
user = new UserAgent();
while (true) {
if (canCheck()) {
user.visit("https://twitter.com/******");
Element mostRecentTweet = user.doc.findFirst("<div class=\"tweet-text\"");
System.out.println(mostRecentTweet.innerText());
if (lastTweet != null) {
if (mostRecentTweet.innerText().equals(lastTweet.innerText())) {
String phoneNumber = searchForNumber(mostRecentTweet.innerText());
if (phoneNumber != null) {
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + phoneNumber));
startActivity(intent);
break;
}
}
}
lastTweet = mostRecentTweet;
}
}
}
答案 0 :(得分:0)
你想要做的事情相当复杂,因为它涉及许多用户不喜欢的事情:持续运行后台工作,在没有用户干预的情况下拨打电话等等。
要定期工作,最简单的解决方案是use JobScheduler
,您的应用程序逻辑将放在JobService
子类中。然后,您需要一个活动,可能响应于单击按钮,将安排JobScheduler
的定期工作。请注意,您的作业将不定期运行,并且在Android 6.0+设备上,当您的应用进入应用待机模式以及设备处于打盹模式时,它们将很少运行。
在JobService
中,您可以从互联网上获取数据。但是,您无法轻松启动活动,因为这样做是积极的用户敌意。您当时不知道用户在前台做了什么,并且接管屏幕以拨打电话将中断用户。一个更好的解决方案是提高Notification
,也许是优先级&#34;单挑&#34;一,允许用户在用户需要时拨打电话。
ACTION_CALL
需要CALL_PHONE
权限,如果您的targetSdkVersion
为23或更高,则需要在您的活动中实施runtime permissions,因为用户必须同意允许您代表用户拨打电话。
答案 1 :(得分:-1)
使用在webscrapper库找到字符串时生成事件的后台服务,然后在应用中注册侦听此事件的广播接收器。对于后台服务,请阅读此artcicle https://www.bignerdranch.com/blog/choosing-the-right-background-scheduler-in-android/希望有所帮助