Cordova Jquery Mobile本地通知onclick更改页面
对于这篇长文章,我感到抱歉,但我认为这是解释发生了什么的唯一方法......经过大量研究,我没有找到答案,我正在寻找帮助......我认为一个大问题......
所以这个Web应用程序根据时间选择器安排一个本地通知,用户与之交互..我使用的是cordova和jquery移动多页系统......它通过div ID在页面间切换,导航看起来像这样:index.html,index.html#page2,index.html#page3 ..本地通知是Cordova Katzer本地插件的java插件。
该插件只能在onDeviceReady函数中使用,而jquery mobile不会,像这样...
document.addEventListener('deviceready', onDeviceReady, false);
/* JQUERY MOBILE HERE */
$(document).on("pagecreate", "#home", function(event) {
$("a#btnpage2").click(function (e) {
e.stopImmediatePropagation();
e.preventDefault();
$( "#page2" ).pagecontainer( "change"); // change to #page2
});
});
$(document).on("pagecreate", "#page2", function(event) {
console.log("#page2 created");
});
function onDeviceReady(){
/* NOTIFICATION PLUGIN HERE */
//create notification
var msg = "notification message";
window.plugin.notification.local.add({
id: 'notif',
date: dateobject,
message: msg,
json: JSON.stringify({ test: msg }),
title: 'Title',
autoCancel: true,
ongoing: false
});
//onclick event notification
window.plugin.notification.local.onclick = function (notif, state, json) {
var msg = JSON.parse(json).test;
$( "#notificationPage" ).pagecontainer( "change", { text: msg} ); //pass data and change to #page2
}
//ontrigger notification
window.plugin.notification.local.ontrigger = function (notif, state, json) {
var msg = JSON.parse(json).test;
}
}
当通知被触发时,当我点击它时,它应该将页面更改为#notificationPage。 问题在于onclick里面的命令不起作用,即使当我点击运行应用程序的通知时,它也会抛出这个错误:
Uncaugh错误:初始化之前无法在pagecontainer上调用方法; 试图调用方法'改变'。
但是下面的命令会改变页面,在google上找到它:$ .mobile.changePage(“#notificationPage”)。 但只有当应用程序正在运行,而不是中断。 我认为,如果它在后台或关闭,即使它没有中断,它也不会改变页面......它会打开由插件定义的活动。 当我说在后台或关闭,而不是中断我的意思是应用程序被关闭的主要按钮,而不是后退按钮,完全关闭应用程序..我想这是处理通知的类:
/ * Receiver.class通知插件* /
Intent intent = new Intent(context, ReceiverActivity.class)
.putExtra(OPTIONS, options.getJSONObject().toString())
.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
int requestCode = new Random().nextInt();
PendingIntent contentIntent = PendingIntent.getActivity(context, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
return notification.setContentIntent(contentIntent);
/ * ReceiverActivity.class通知插件* /
Context context = getApplicationContext();
String packageName = context.getPackageName();
Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(packageName);
launchIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP);
launchIntent.putExtra("MSG", msgJson); // here I pass the json message to the new intent, thats gonna open when clicking the notification
context.startActivity(launchIntent);
所以基本上,我想点击通知,并打开一个特定的页面,所以我可以获得点击json值并传递到该页面,然后将其显示给div元素...似乎我不能使用通知在onDeviceReady之外的插件命令,以及在onDeviceReady中都没有jquery移动命令....除此之外,如果应用程序关闭并中断,则必须处理同样的问题。
在Java方面,我可以创建另一个活动以及主要的cordova应用程序活动,并在xml中创建一个布局,并添加一个textview ...在这个新活动的.java文件上,我想我可以将setContentView设置为此xml布局,并将textView的文本设置为我想要的json对象值...此json值与通知的消息相同...我非常确定,像95%的人确信这会工作,还没有测试过,但事情是,它很难维护。
我所尝试的是创建这个新活动,就像cordova的主要活动一样,但loadUrl,我设置为我想去的页面,而不是LaunchUrl,它从cordova的config.xml加载地址,并传递了json值作为额外的意图创建作为一个URL参数,所以在jQuery的移动端我可以采取document.URL和参数...这样,首先我从通知插件编辑ReceiverActivity.class:
/ * ReceiverActivity.class通知插件* /
Context context = getApplicationContext();
//String packageName = context.getPackageName();
Intent launchIntent = new Intent(context, NotificationActivity.class);
launchIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
launchIntent.putExtra("MSG", msgJson);
context.startActivity(launchIntent);
/ * NotificationActivity.class cordova应用第二项活动* /
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
String msg;
Intent intent = getIntent();
Bundle extras = intent.getExtras();
msg = extras.getString("MSG");
String utf_encoded = null;
try {
utf_encoded = URLEncoder.encode(msg,"UTF-8");
} catch (UnsupportedEncodingException e) {}
String url = "file:///android_asset/www/index.html#notificationPage?parameter="+utf_encoded;
super.loadUrl(url);
}
而在JavaScript方面,我可以在url中检索该参数:
document.addEventListener('deviceready', onDeviceReady, false);
$( document ).on( "pagebeforechange" , function ( event, data ) {
if ( data.toPage[0].id == "notificationPage" ) {
var url = document.URL;
var urlParams = decodeURIComponent(url);
var onlyParams = urlParams.split('=')[1];
var newchar = " ";
var paramValue = onlyParams.split('+').join(newchar);
$('#notificationPage #showMessage').empty();
$('#notificationPage #showMessage').append("<p>Message: " + paramValue + "</p>");
}
});
function onDeviceReady(){
/* ondeviceready */
}
这实际上工作,但它有一些错误...有时页面加载,有时页面不加载,页面有时转向黑屏......它特别是如果应用程序关闭和中断,但如果其打开,大部分时间都是黑屏......如果我点击设备上的后退按钮,它会“导航回去”,但实际上它会进入应该激活并显示消息的页面......它像页面有时在这个黑屏幕后面,除非我使用后退按钮,否则它不会出现在前面..我没有选择......几乎没有任何具体和稳定的解决方案尝试过。标志,JavaScript, Java,重定向url在JavaScript,在Java,似乎没有工作...
那么我不是一个开发人员。 我是一名设计师,尽我所能完成这项任务...但上帝,它的努力......理论上,一个简单的解决方案是将所有内容都保存为默认设置,当插件“启动”应用程序或意图时,或者无论点击通知,只需使用jquery mobile中的命令运行javascript即可更改页面......这太棒了! 哈哈我真的需要帮助..
感谢所有正在阅读此内容的人...致所有人都会尽力帮助我......谢谢大家
使用这种方法:
cordova.plugins.notification.local.on("click", function (notification) {
alert(notification.text);
}, scope);
这里是更新的文档。
Cordova Jquery Mobile本地通知onclick更改页面
链接地址: http://www.djcxy.com/p/61939.html上一篇: Cordova Jquery Mobile Local Notification onclick change page