我想检测铃声何时播放完毕,但 AndroidRingtone
类没有OnCompletionListener
像该类MediaPlayer
那样的 。具体来说,在实践中,我按以下方式播放铃声:
Ringtone r = RingtoneManager.getRingtone(
getApplicationContext(), soundUri);
r.play();
Run Code Online (Sandbox Code Playgroud)
我想捕捉铃声播放器的完成事件(如果它甚至启动了这个事件......),就像人们可以在课堂上做的那样MediaPlayer
。我知道该类Ringtone
提供了该方法isPaying
,但我不喜欢定期检查它直到返回 false 的解决方案...另一方面,通过该类MediaPlayer
,可以检测玩家是否已完成播放某些内容,通过设置回调以更干净的方式OnCompletionListener
:
final MediaPlayer player = new MediaPlayer();
player.setDataSource(filepath);
player.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
player.release();
}
});
player.prepare();
player.start();
Run Code Online (Sandbox Code Playgroud)
那么,如何使用铃声管理器执行相同的操作呢?有可能吗?Ringtone.isPlaying
或者定期检查, 直到返回 false 的解决方案是最好的解决方案吗???
我正在开发一个免费的消息传递应用程序,我希望基于用户的电话号码实施用户注册过程,并且为了验证该号码,我想在以下地区实施类似于Yo,WhatsApp或Telegram应用程序的SMS机制:用户会在SMS中收到唯一的确认码,以验证电话号码并激活用户的帐户。
我的研究表明,所有这些应用程序都使用第三方短信网关提供商,例如Twilio或Nexmo,但是对于免费的休闲应用程序(例如Yo)而言,这似乎非常昂贵。因此,我想知道像Yo这样的免费应用是否使用付费的SMS网关提供商向其用户发送确认代码,或者他们确实使用了其他任何东西。
我还检查了Telegram的Android应用程序源代码(请参阅此处),但是我无法弄清楚它们用于发送带有确认代码的SMS的方式和服务。是否有人熟悉Telegram的源代码,可以告诉我他们是如何做到的?
非常感激。
我正在使用Apache PDFBox从PDF文件中提取页面,我找不到提取不可选内容(文本或图像)的方法.使用可从PDF文件中选择的内容,没有问题.
需要注意的是有问题的PDF文件不具有任何限制关于复制的内容,至少从我上的文件的"文档限制小结"看到:它们都具有"内容复制"和"内容复制为Accessbility"不允许的!在同一PDF文件中,有可选择的内容和不可选择的其他部分.所发生的是,提取的页面带有"洞",即它们只有PDF的可选部分.但是在MS Word上,如果我将PDF添加为对象,则会显示PDF页面的全部内容!所以我希望对PDFBox lib或任何其他Java lib做同样的事情!
这是我用来将PDF页面转换为图像的代码:
private void convertPdfToImage(File pdfFile, int pdfId) throws IOException {
PDDocument document = PDDocument.loadNonSeq(pdfFile, null);
List<PDPage> pdPages = document.getDocumentCatalog().getAllPages();
for (PDPage pdPage : pdPages) {
BufferedImage bim = pdPage.convertToImage(BufferedImage.TYPE_INT_RGB, 300);
ImageIOUtil.writeImage(bim, TEMP_FILEPATH + pdfId + ".png", 300);
}
document.close();
}
Run Code Online (Sandbox Code Playgroud)
有没有办法从这个Apache PDFBox库(或任何其他类似的库)中提取PDF中的不可选内容?或者这根本不可能?如果确实不是,为什么呢?
非常感谢任何帮助!
编辑:我使用Adobe Reader作为PDF查看器和PDFBox v1.8.以下是PDF示例:https://dl.dropboxusercontent.com/u/2815529/test.pdf
在 adb shell 上,我运行命令“adb -s shell am start -a android.intent.action.CALL -d tel:123456”来模拟对我的测试设备的假来电。它工作得很好。但我也想模拟来自 ADB shell 的未接来电,例如我会通过 telnet 命令使用“gsm cancel +123456”命令。我在任何地方都找不到如何做到这一点......亚行甚至可以这样做吗?如果是这样,如何?
PS:命令“adb -s shell input keyevent 6”不是答案!
此外,valueOf()
Java的Enum
类API 的方法,任何人都知道,如果任何其他Java API类抛出相同的异常,即NullPointerException("Name is null");
?