- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在我的应用程序中实现 SmsInboxPlugin,他们的以下示例代码总是提示错误:
smsInboxPlugin.isSupported ((function(supported) {
if(supported)
alert("SMS supported !");
else
alert("SMS not supported");
}), function() {
alert("Error while checking the SMS support");
});
问题出在哪里?
还有这个替代品Cordova-SMS-Reception-Plugin给出同样的错误。
最佳答案
创建下面给出的文件:-
Plugin.xml
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android"
id="com.root.smsplugin"
version="0.2.11">
<name>SMSPlugin</name>
<description>SMS Reading implemented</description>
<license>Apache 2.0</license>
<keywords>cordova,coolest</keywords>
<repo></repo>
<issue></issue>
<js-module src="www/SMSPlugin.js" name="SMSPlugin">
<clobbers target="SMSPlugin" />
</js-module>
<!-- android -->
<platform name="android">
<config-file target="res/xml/config.xml" parent="/*">
<feature name="SMSPlugin" >
<param name="android-package" value="SMSPlugin"/>
</feature>
</config-file>
<source-file src="src/android/SMSPlugin.java" target-dir="src/com/root/smsplugin/" />
<config-file target="AndroidManifest.xml" parent="/*">
<uses-permission android:name="android.permission.RECEIVE_SMS" />
</config-file>
<config-file target="AndroidManifest.xml" parent="/manifest/application">
<receiver android:name="com.root.smsplugin.SMSReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
</intent-filter>
</receiver>
</config-file>
<source-file
src="src/android/SMSReceiver.java"
target-dir="src/com/root/smsplugin/" />
</platform>
</plugin>
SMSPlugin.js
var exec = require('cordova/exec');
var SMSPlugin = function() {};
/**
* Check if the device has a possibility to send and receive SMS
*/
SMSPlugin.prototype.isSupported = function(successCallback,failureCallback) {
return exec(successCallback, failureCallback, 'SMSPlugin', 'HasSMSPossibility', []);
}
SMSPlugin.prototype.startReception = function(successCallback,failureCallback) {
return exec(successCallback, failureCallback, 'SMSPlugin', 'StartReception', []);
}
/**
* Stop the receiving sms.
*/
SMSPlugin.prototype.stopReception = function(successCallback,failureCallback) {
return exec(successCallback, failureCallback, 'SMSPlugin', 'StopReception', []);
}
var SMSPlugin = new SMSPlugin();
module.exports = SMSPlugin;
//});
SMSPlugin.java
import android.app.Activity;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.PluginResult;
import org.json.JSONArray;
import org.json.JSONException;
import com.root.smsplugin.SMSReceiver;
/**
* Created by root on 14/10/16.
*/
public class SMSPlugin extends CordovaPlugin {
public final String ACTION_IS_SMS_POSSIBILITY = "HasSMSPossibility";
public final String ACTION_START_RECEPTION_SMS = "StartReception";
public final String ACTION_STOP_RECEPTION_SMS = "StopReception";
private CallbackContext callback_receive;
private SMSReceiver smsReceiver = null;
private boolean isReceiving = false;
public SMSPlugin() {
super();
}
@Override
public boolean execute(String action, JSONArray arg1,
final CallbackContext callbackContext) throws JSONException {
if (action.equals(ACTION_IS_SMS_POSSIBILITY)) {
Activity ctx = this.cordova.getActivity();
if (ctx.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, true));
} else {
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, false));
}
return true;
} else if (action.equals(ACTION_START_RECEPTION_SMS)) {
// if already receiving (this case can happen if the startReception is called
// several times
if (this.isReceiving) {
// close the already opened callback ...
PluginResult pluginResult = new PluginResult(
PluginResult.Status.NO_RESULT);
pluginResult.setKeepCallback(false);
this.callback_receive.sendPluginResult(pluginResult);
// ... before registering a new one to the sms receiver
}
this.isReceiving = true;
if (this.smsReceiver == null) {
this.smsReceiver = new SMSReceiver();
IntentFilter fp = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
fp.setPriority(1000);
// fp.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
this.cordova.getActivity().registerReceiver(this.smsReceiver, fp);
}
this.smsReceiver.startReceiving(callbackContext);
PluginResult pluginResult = new PluginResult(
PluginResult.Status.NO_RESULT);
pluginResult.setKeepCallback(true);
callbackContext.sendPluginResult(pluginResult);
this.callback_receive = callbackContext;
return true;
} else if (action.equals(ACTION_STOP_RECEPTION_SMS)) {
if (this.smsReceiver != null) {
smsReceiver.stopReceiving();
}
this.isReceiving = false;
// 1. Stop the receiving context
PluginResult pluginResult = new PluginResult(
PluginResult.Status.NO_RESULT);
pluginResult.setKeepCallback(false);
this.callback_receive.sendPluginResult(pluginResult);
// 2. Send result for the current context
pluginResult = new PluginResult(
PluginResult.Status.OK);
callbackContext.sendPluginResult(pluginResult);
return true;
}
return false;
}
}
SMSReciever.java
package com.root.smsplugin;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.PluginResult;
/**
* Created by root on 14/10/16.
*/
public class SMSReceiver extends BroadcastReceiver {
public static final String SMS_EXTRA_NAME = "pdus";
private CallbackContext callback_receive;
private boolean isReceiving = true;
// This broadcast boolean is used to continue or not the message broadcast
// to the other BroadcastReceivers waiting for an incoming SMS (like the native SMS app)
private boolean broadcast = false;
@Override
public void onReceive(Context ctx, Intent intent) {
// Get the SMS map from Intent
Bundle extras = intent.getExtras();
if (extras != null)
{
// Get received SMS Array
Object[] smsExtra = (Object[]) extras.get(SMS_EXTRA_NAME);
for (int i=0; i < smsExtra.length; i++)
{
SmsMessage sms = SmsMessage.createFromPdu((byte[]) smsExtra[i]);
if(this.isReceiving && this.callback_receive != null) {
String formattedMsg = sms.getMessageBody();
PluginResult result = new PluginResult(PluginResult.Status.OK, formattedMsg);
result.setKeepCallback(true);
callback_receive.sendPluginResult(result);
}
}
// If the plugin is active and we don't want to broadcast to other receivers
if (this.isReceiving && !broadcast) {
this.abortBroadcast();
}
}
}
public void broadcast(boolean v) {
this.broadcast = v;
}
public void startReceiving(CallbackContext ctx) {
this.callback_receive = ctx;
this.isReceiving = true;
}
public void stopReceiving() {
this.callback_receive = null;
this.isReceiving = false;
}
}
按照 Create own custom Cordova Plugin. 中给出的程序进行操作仅引用创建目录结构。
然后像下面这样调用插件:-
SMSPlugin.startReception (function(msg) {
alert(msg);
}, function() {
alert("Error while receiving messages");
});
对我来说效果很好,希望对你也有帮助
关于javascript - SmsInboxPlugin 总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33882302/
我不明白 int 63823 为何比 double 1.0 占用更少的空间。在这个特定实例中,int 中是否没有存储更多信息? 最佳答案 I don't understand how an int 6
这可能不是一个直接的代码问题,但它是一个经常出现在 SO 上的问题,我发现阅读它非常有用。 App Store - Help answering “Missing Compliance” (using
我在我们的应用程序中使用 syncfusion 寻呼机和下拉列表请打开以下链接。 https://stackblitz.com/edit/angular-nv6myv?file=src%2Fapp%2
以便解释指针和引用in this question我写了这段代码。 MyClass& MyClass::MyInstance() { static MyClass & myLoca
在 C 和 C++ 中,assert 是一个非常 重量级例程,将错误写入 stdout 并终止程序。在我们的应用程序中,我们实现了一个更强大的 assert 替代品,并为其提供了自己的宏。已尽一切努力
我已经创建了一个 MVC webApi 项目,现在我想使用身份验证和授权。我想我已经实现了这种安全措施,但由于某种原因,有些事情变糟了,当我编写我的凭据并尝试调用一些 webApi 方法时,显示消息“
我发现自己使用一种奇怪的方式向我的函数添加回调函数,我想知道是否有更通用的方式向函数添加回调函数,最好的情况是我的所有函数都检查最后给定的作为函数的参数,如果是,则将其用作回调。 我以前是这样的: v
几乎从来没有我只想获取某个 Remote 的情况;我总是想要所有的 Remote 。我认为这将是一个足够常见的用例,git 会考虑它(与他们有 pull.rebase true 的方式相同)。 那么,
我正在尝试使用 inarray 但它总是返回 true?有任何想法吗? (所有 li 均已显示) $("#select-by-color-list li").hide(); // get the se
我正在尝试为我公司的开发环境设置过期网址。我们使用 lighttpd在此环境中提供上传的文件,我发现 these docs这似乎相当有希望。 问题是我似乎根本无法让它工作,而且我有点不知所措,试图找出
我无法让“文件夹”外部变量工作。我总是得到[:]。 我正在 Windows 下的 Grails 上进行开发(这就是为什么外部配置文件看起来像 file:C:\path\to/file)。 我在另一个项
这个问题是出于对 PL 如何工作的好奇,而不是其他任何事情。 (它实际上是在查看与 Haskell 不同的 SML 时想到的,因为前者使用按值调用 - 但我的问题是关于 Haskell。) Haske
我有一个高速缓存内存模块,我希望它是可字寻址的,但有字节的写使能信号。 always @ (posedge clk) begin //stuff... if(write) begin
我正在处理一些代码,其中一个对象“foo”正在创建另一个对象对象“bar”,并向其传递一个Callable。之后 foo 将返回bar,然后我希望 foo 变得无法访问(即:可用于垃圾收集)。 我最初
我已将我的程序与此方法相关联: public static void CreateFileAssociation(string extension, string key, string descri
所以我正在进行目录遍历,但我无法让 opendir 按照我想要的方式工作。它总是无法打开我发送的目录,它给出了一些未知的错误。我通常传入 argv[1],但我放弃了,只是开始硬编码路径。 char *
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 9 年前。 出于某种原因,我的(基本)程序总是打印我为 else 语句保留的
我不想冒为此提出破解的风险,因为它涉及 datetime 对象。基本上,我想按如下方式进行转换: 2010-04-21 06:37:53 -> 2010-04-21 06:40:00 2010-08-
我正在用 C 语言玩文件 I/O。我正在尝试使用 fgets 从一个文件中读取数据并将其输出到另一个文件。问题是它总是返回 NULL,因此没有任何内容被复制到输出文件中。这是我的代码: #includ
class MyClass { // empty class with no base class }; int main() { MyClass* myClass = new MyC
我是一名优秀的程序员,十分优秀!