使用html5(提醒应用程序)访问电话闹钟(原生资源)

2023-12-02

这些是我的技术,

  1. HTML5
  2. Jquery 移动、Jquery、Javascript
  3. Css
  4. Cordova

我们正在使用 HTML 5 开发应用程序,我们需要访问手机(Android、iPhone、Windows Phone)资源,例如闹钟(用于创建提醒)。 问题,

  1. 我们能否通过该技术访问手机原生资源?
  2. 我们是否需要不同的编码来访问不同的移动操作系统?
  3. 这种方法有什么优点和缺点?
  4. 这样做的最佳方法是什么?
  5. Any suggestions ?

通过 javascript 访问 Android、Iphone 和 Windows Phone 8 警报管理器的示例代码或示例?


有没有人用过这个后台服务插件为了这个任务?


我问了有关此的问题用于访问警报管理器

有谁有示例代码或给我一步一步的指导,如何使用它来访问 Android 警报管理器?


我尝试通过java脚本访问本机代码,例如这个问题和答案但它不起作用。

当我点击按钮时;

  1. 在 eclipse logcat 中;在科尔多瓦标签下,

未捕获的类型错误:对象 [对象对象] 没有方法“getTelephoneNumber”

  1. 在 eclipse logcat 中;在铬标签下,

[INDO:CONSOLE(22)]“未捕获类型错误:对象 [object Object] 没有方法 'getTelephoneNumber'”,来源:file:///android_asset/www/index.html (22)

我的phonegap版本是2.7.0,模拟器API级别19。这里有什么问题?我错过了什么吗?


经过长时间的运行过程,我设法想出针对 Android 设备的解决方案。

  1. 使用访问本机代码javascript是可能的
  2. 使用 javascript 接口会带来 xss 漏洞的威胁,但在最新的 API Level 19 中消除了这一点。

让代码说话;首先是MainActivity代码

@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })
public class MainActivity extends DroidGap
  1. onCreate方法代码
super.init();
WebView webView = new WebView(this);
webView.getSettings().setJavaScriptEnabled(true);

// Add these lines according to your requirements
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setSaveFormData(true);
webView.getSettings().setAllowContentAccess(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setAllowFileAccessFromFileURLs(true);
webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
//webView.getSettings().setSupportMultipleWindows(true);
webView.getSettings().setSupportZoom(true);
webView.setWebViewClient(new WebViewClient());
webView.setClickable(true);
  1. 要完成下一步,您需要Reminder与你的班级MainActivity类以及资产文件夹中的任何 html 文件。就我而言,我有Login.html in assets/www/Phone/Login.html
webView.addJavascriptInterface(new Reminder(this), "Reminder");
webView.setWebChromeClient(new WebChromeClient());
webView.loadUrl("file:///android_asset/www/Phone/Login.html");
setContentView(webView);
  1. 这是我的Reminder类及其构造函数
public class Reminder {
    private Context con;

    public Reminder(Context con){
        this.con=con;
    }
}
  1. ReminderReceiver class
public class ReminderReceiver extends BroadcastReceiver {
    // Vibrator object
    public Vibrator vibrator;
    long[] pattern = { 0L, 250L, 200L, 250L, 200L, 250L, 200L, 250L, 200L, 250L, 200L, 250L, 200L, 250L, 200L };

    // Ringtone object
    Uri ringT;
    Ringtone ringTone;

    @Override
    public void onReceive(Context context, Intent intent) {
        String remindText = intent.getStringExtra("text");
        int receiverID = intent.getIntExtra("AlrmId", 0);

        // Notification creation
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
                .setSmallIcon(android.R.drawable.ic_popup_reminder)
                .setContentTitle("Reminder").setContentText(remindText);

        // Create vibrator pattern
        vibrator = (Vibrator) context
                .getSystemService(Context.VIBRATOR_SERVICE);
        vibrator.vibrate(pattern, -1);// No repetition

        // Notification tone creation and play
        ringT = RingtoneManager
                .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        ringTone = RingtoneManager.getRingtone(context, ringT);
        ringTone.play();

        // Create toast and show on center of the screen
        Toast toast = Toast.makeText(context, remindText, Toast.LENGTH_LONG);
        toast.setGravity(Gravity.CENTER, 0, 0);
        toast.show();

        // Show status bar notification
        NotificationManager mNotificationManager = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(receiverID, mBuilder.build());
    }
}
  1. 可以通过 JavaScript 调用的方法,负责将 Alarm 对象添加到系统警报管理器中。在提醒类中
@JavascriptInterface
public void addReminder(int mYear, int mMonth, int mDay, int mHour, int mMinute) {
    Calendar c = Calendar.getInstance();

    // set Reminder time and date into calendar object
    c.set(Calendar.YEAR, mYear);
    c.set(Calendar.MONTH, mMonth); // Don't use exact numeric value of the month, use one minus. Ex: April => 3
    c.set(Calendar.DATE, mDay);
    c.set(Calendar.HOUR_OF_DAY, mHour);
    c.set(Calendar.MINUTE, mMinute);
    c.set(Calendar.SECOND, 0);

    // Unique Alarm ID creation
    int alrmId = 0;
    alrmId = Integer.parseInt(mMonth + "" + mDay + "" + mHour + "" + mMinute);
    
    // Alarm task creation
    Intent in = new Intent(con, ReminderReceiver.class);
    in.putExtra("text", "You have a Reminder!");
    in.putExtra("AlrmId", alrmId);

    PendingIntent pi;

    pi = PendingIntent.getBroadcast(con, alrmId, in, 0);

    AlarmManager am;

    am = (AlarmManager) (con.getSystemService(Context.ALARM_SERVICE));
    am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
}
  1. 现在,您需要编辑您的Android Manifest.xml,

    • 设置权限<uses-permission android:name="android.permission.VIBRATE" /> and
    • 登记ReminderReceiver类中,添加此行<application> </application> tag <receiver android:name=".ReminderReceiver"></receiver>.
  2. 最后在你的html文件中添加按钮,添加javascript函数,在按钮单击事件和该函数调用内部调用它addReminder method

function test() {
    Reminder.addReminder(2014, 3, 4, 12, 30);
}

希望这个答案能够帮助那些尝试通过 Phonegap 进行开发时使用 Android 手机的 Native 功能的人。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用html5(提醒应用程序)访问电话闹钟(原生资源) 的相关文章

  • 如何指定网站的语言? (HTML?)

    如何指定页面采用某种语言以便搜索引擎可以理解 这是我放在顶部的元标记吗 如果是 您知道大多数搜索引擎是否使用它来确定语言吗 我已将一页英文内容转换为几种不同的语言 并希望将该信息包含在 html 中 让搜索引擎知道他们正在处理哪种语言 快速
  • 如何防止 Iframe 在与浏览器交互后弄乱浏览器的历史记录?

    因此 就我而言 我使用 Iframe 将 Grafana 附加到我的页面 这为我提供了漂亮且易于使用的图表 可以注意到 每次在图表上进行放大或缩小 使用鼠标单击 交互后 Grafana 的 Iframe 都会在我的 Angular 页面上触
  • 在 android 中建立与 MySQL 的池连接

    我需要从我的 Android 应用程序访问 MySQL 数据库 现在所有的工作都通过 DriverManager getConnection url 等等 但我必须从多个线程访问数据库 所以我必须使用连接池 问题1 是 com mysql
  • Android:后台Activity可以执行代码吗?

    后台的活动是否被视为 正在运行 并且可以执行代码 还是处于挂起状态 他们暂停了 活动生命周期 http developer android com reference android app Activity html ActivityLi
  • Android 构建发布失败,原因为:java.lang.ArrayIndexOutOfBoundsException:213(pr​​oguard 问题)

    我的项目使用调试构建变体构建得很好 但使用发布变体 Android Studio 会抛出 引起原因 java lang ArrayIndexOutOfBoundsException 213 可能是什么问题 如果我设置minifyEnable
  • 对于一个单元格,RecyclerView onBindViewHolder 调用次数过多

    我正在将 RecyclerView 与 GridLayoutManager 一起使用 对于网格中的每个项目 我需要调用 REST api 来检索数据 然后 从远程异步获取数据后 我使用 UIL 加载 显示图像 一切似乎都很好 但我发现 on
  • okhttp 获取失败响应

    我已经在我的 android 客户端中实现了 okhttp 来进行网络调用 当我收到失败响应时 我会收到失败代码以及与该代码相关的文本作为消息 但我没有收到服务器发送给我的自定义失败响应 在我实施的代码中的失败响应中 我收到的消息只是 错误
  • WorkManager 或 AlarmManager 用于日常请求然后通知工作?

    这是用例 用户设置具有特定时间的每日通知 在指定时间 发出网络请求以获取一些数据 然后使用检索到的数据显示通知 我不确定是否应该使用 AlarmManager 还是 WorkManager 来实现这个用例 据我了解 AlarmManager
  • OnLongClickListener 不工作

    我有一个ImageView 我需要使用onLongClickListener对于图像视图 当我使用这段代码时 什么也没有发生 Code gallery Gallery findViewById R id gall1 gallery setA
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • Dagger 2 没有生成我的组件类

    我正在使用 Dagger 2 创建我的依赖注入 几个小时前它还在工作 但现在不再生成组件 这是我创建组件的地方 public class App extends Application CacheComponent mCacheCompon
  • HTML 离线应用程序缓存,列出下载的文件

    作为我正在构建的离线 Web 应用程序的加载屏幕的一部分 使用缓存清单 http developer apple com library safari documentation iPhone Conceptual SafariJSData
  • Android Studio 缓慢的增量构建

    我已经完成了许多步骤来完善我们的构建系统 those https stackoverflow com questions 16775197 building and running app via gradle and android st
  • Android 如何将总天数准确更改为年、月、日?

    我正在做一个应用程序 该应用程序与根据给定的生日日期输入获取一个人的年龄有关 为此 我从下面的代码中获取从该日期到当前日期的总天数 String strThatDay 1991 05 10 SimpleDateFormat formatte
  • 在 Samsung Galaxy S5 Android 5.0 上使用 MediaPlayer 加载音频流需要超过 10 秒

    由于更新至 Android 5 0 MediaPlayer 在 Samsung Galaxy S5 上无法正常工作 启动音频流后加载时间超过 10 秒 示例代码 MediaPlayer mPlayer new MediaPlayer Str
  • 如何检查 Android 中的同步设置

    我正在构建一个 Android 应用程序 我需要检查设备中注册的每个单独帐户的同步设置 我知道我可以通过 ContentResolver 类来做到这一点 但我遇到了一些问题 我已设法获取设备上所有帐户的列表 但我不知道在运行时从哪里获取特定
  • 没有支持 FEATURE_CAMERA_EXTERNAL 的 Android 设备

    根据this doc https source android com devices camera external usb cameras一些 Android 设备允许使用 Camera2 API 访问外部 USB 摄像头 我检查了大约
  • 如何在 AngularJS 循环内使用标签

    所以我在里面ng repeat像这样 li li
  • Android 屏幕方向错误

    我使用的是 Android HTC HERO 2 1 版本 我写的活动
  • Git 实验分支还是单独的实验存储库?

    我正在开发一个 Android 应用程序 并且在整个开发周期中一直使用 Git 现在 我想构建并发布实验性功能 供人们尝试和安装 同时仍将原始的 稳定的应用程序安装在他们的设备上 现在 这意味着我需要使用不同的包名称 这会更改开发项目中的一

随机推荐

  • 什么基于java的CMS可以管理现有页面的内容?

    我们有一个现有的正在运行的java web应用程序 当前页面的内容是静态的 但页面仍然是jsp文件 它们的外观和感觉是专门设计的 我的客户现在想要使用 CMS 来管理新闻 事件等内容的更新 并对 jsp 代码进行最小的更改 我尝试了 ope
  • 带有 Group Unwind 和 Project 的 MongoDb C# 类型聚合

    我有一个这样的集合 id 1 OtherProperties 100 PersonInventory FirstName Joe MiddleName Bob LastName Blogs PersonId 1 id 2 OtherProp
  • UITextview 隐藏光标/更改光标颜色

    在我的应用程序中 在 UITextview 中我想隐藏光标 如果这是不可能的 那么我想改变光标的颜色 我们可以这样做吗 我已经搜索过它 但只得到了 UITextfield 的答案 Thanks 在iOS 7上 您只需将文本视图的tintCo
  • 如何在 PHP 中使用 FTP 从另一台服务器传输文件

    我正在尝试找到一种在服务器之间传输文件的方法 源服务器可以是任何平台 我们甚至可能对它一无所知 除了它支持 FTP 之外 我在 SO 上找到的许多帖子建议使用 scp sftp rsync 或 wget 来实现此目的 鉴于这个 PHP 脚本
  • 如何在 SQL Server 中使用带框架的窗口函数执行 COUNT(DISTINCT)

    搭载这个可爱的问题 可以使用 DISTINCT 进行分区函数 COUNT OVER 我希望计算不同值的移动计数 大致如下 Count distinct machine id over partition by model order by
  • C++11 之前的初始值设定项列表中同一变量的多个突变是否为未定义行为

    考虑以下代码 int main int count 0 int arrInt 2 count count return 0 如果我们使用以下命令编译代码clang std c 03它会产生以下警告 活生生的例子 warning multip
  • redbean - 嵌套豆 - 出了什么问题?

    我正在尝试建立一个简单的嵌套 bean 关系 我错过了什么 我真的很喜欢 redbean 简单的 ORM 语法 并且真的很想使用它 但我似乎无法让它为我工作 还有其他类似的东西可能更成熟吗 我想要一些轻量且简单的东西来构建 WordPres
  • setCloseButtonIcon(Bitmap drawable) 不适用于 ChromeCustomTab 中的 SVG

    我需要更改 ChromeCustomTab Android 中的默认十字图标 我使用以下代码通过后退图标更改它 Bitmap icon BitmapFactory decodeResource context getResources R
  • 无法使用 spring 连接到 Azure SQL 数据库服务器

    我能够连接到具有 IP 地址的数据库 但是如果 我在 Azure SQL 数据库服务器中创建了我的数据库 因为我无法使用 spring 配置 Java Web 应用程序进行连接 它显示错误说 与主机 vinayaka cloudapp ne
  • Shell 脚本中的字符串连接错误

    我是 Shell 脚本编写的初学者 我使用了一个变量来存储值A MyScript 我尝试在后续步骤中连接字符串 A new 令我惊讶的是它不起作用并且 A new worked 您能帮我理解这些细节吗 Thanks Shell 变量名由字母
  • 显示来自 BroadcastReceiver 的复杂 Toast

    我想知道是否有人可以帮助我 我试图在收到短信时显示 toast 元素 这个 toast 应该包含一个布局 其中有一个图像 短信图标 和 2 个文本视图 发件人 消息 如果我从活动中调用以下方法 它将按预期工作 public void sho
  • 为什么 item.getMenuInfo() 为空?

    在我的 ListView 项目中 我有 4 8 个 ImageView 其中一些是不可见的 具体取决于某些值 和 4 个 TextView 当我长按 Listview 的项目时 AdapterContextMenuInfo item get
  • 如何判断 DOM 元素在当前视口中是否可见?

    有没有一种有效的方法来判断 DOM 元素 在 HTML 文档中 当前是否可见 出现在viewport 问题涉及 Firefox Now 大多数浏览器支持获取边界客户端矩形方法 这已成为最佳实践 使用旧答案非常慢 不准确 and 有几个错误
  • 不支持的操作:不可写 python

    电子邮件验证 Email validator import re def is email email input Enter your email pattern w 1 w w file open ValidEmails txt r i
  • 如何为 Eclipse 编写插件? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我如何开始编写插件Eclipse 我找过文档 但不幸的是很少或者很差 那么有哪些文章可以推荐呢 Eclipse 和 IBM 的主站点上有一些非常好的资源和教程 最好的方法之一是选
  • mysql_insert_id线程安全吗?

    我正在使用 MySQL C API 构建数据库客户端应用程序 并且我需要获取 INSERT 语句中的最后一个自动增量值 因此 mysql insert id 可以做到 但是这个客户端是多线程的 并且是这样的一段代码 mysql query
  • 如何在Python中使列表只包含不同的元素? [复制]

    这个问题在这里已经有答案了 我有一个 Python 列表 如何使其值唯一 最简单的方法是转换为集合 然后再转换回列表 my list list set my list 这样做的一个缺点是它不会保留订单 您可能还想首先考虑使用集合 而不是列表
  • 保护正在访问的用户文件,以便只有所有者才能访问?

    我正在用 php 编写一个 Web 应用程序 用户可以在其中上传自己的文件或图像 但如何保护这些文件不被所有者以外的其他人访问 想想 dropbox 保护这些文件的机制是什么 我尝试过搜索 但没有得到任何关于此的信息 任何指向教程的指针或链
  • 使用进程名称获取另一个程序的窗口标题

    这个问题可能很基本 但我很难破解它 我假设我必须使用一些东西ctypes windll user32 请记住 我几乎没有使用这些库的经验 甚至没有ctypes作为一个整体 我已经使用此代码列出了所有窗口标题 但我不知道应该如何更改此代码以获
  • 使用html5(提醒应用程序)访问电话闹钟(原生资源)

    这些是我的技术 HTML5 Jquery 移动 Jquery Javascript Css Cordova 我们正在使用 HTML 5 开发应用程序 我们需要访问手机 Android iPhone Windows Phone 资源 例如闹钟