这些是我的技术,
我们正在使用HTML 5开发应用程序,我们需要访问手机(Android,iPhone,Windows Phone)资源,例如闹钟(创建提醒)。 问题,
通过javascript访问Android,Iphone和Windows phone 8警报管理器的示例代码或示例?
是否有人使用此Background Service Plugin执行此任务?
我问过这个use for access alarm manager的问题
任何人都有示例代码或给我一步一步的指导,如何使用它来访问Android报警管理器?
我尝试通过像this question and answer这样的java脚本访问本机代码,但它无效。
当我点击按钮时;
未捕获TypeError:对象[object Object]没有方法'getTelephoneNumber'
[INDO:CONSOLE(22)]“Uncaught TypeError:Object [object Object]没有方法'getTelephoneNumber'”,来源:file:///android_asset/www/index.html(22)
我的phonegap版本是2.7.0,而模拟器API等级是19.这里有什么问题?我错过了什么吗?
答案 0 :(得分:3)
经过长时间的运行后,我设法找到Android设备的解决方案
1)使用javascript is possible访问本机代码
2)使用javascript界面引发xss漏洞的威胁,但在最新的API级别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);
2)要完成下一步,您需要在MainActivity类中使用Reminder类,以及您的assets文件夹中的html文件。就我而言,我在 assets / www / Phone / Login.html
中有 Login.htmlwebView.addJavascriptInterface(new Reminder(this), "Reminder");
webView.setWebChromeClient(new WebChromeClient());
webView.loadUrl("file:///android_asset/www/Phone/Login.html");
setContentView(webView);
3)这是我的提醒类及其构造函数
public class Reminder {
private Context con;
public Reminder(Context con){
this.con=con;
}
}
4) ReminderReceiver 类
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();
// end of toast...
// Show status bar notification
NotificationManager mNotificationManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(receiverID, mBuilder.build());
}}
5)可以通过JavaScript调用并负责将Alarm对象添加到System Alarm Manager的方法。在提醒课程中
@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=>as 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);
}
6)现在,您需要编辑Android Manifest.xml 设置权限,
<uses-permission android:name="android.permission.VIBRATE" />
并注册ReminderReceiver类,在标签中添加此行(不在任何其他标签内!),
<receiver android:name=".ReminderReceiver">
</receiver>
7)最后在你的html文件中添加按钮,添加javascript函数,在按钮点击事件中调用它,并在函数内部调用 addReminder 方法
function test() {
Reminder.addReminder(2014,3,4,12,30);
}
希望这个答案有助于在通过Phonegap进行开发时尝试使用Android手机的原生功能
答案 1 :(得分:1)
数目:
1.我们可以通过这些技术访问手机的原生资源吗?
是的,您可以使用javascripts。
<强> 2。我们是否需要不同的编码来访问不同的移动操作系统?
是的,所有尺码都不合适。
第3。建议:强>
检查每个移动系统的文档。您将找到指南和示例。