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

下一篇: How to integrate amcharts and Ember.js?