mirror of
https://github.com/apache/cordova-android.git
synced 2026-04-23 00:00:09 +08:00
added SMS receive functionality
This commit is contained in:
@@ -4,7 +4,7 @@ package com.nitobi.phonegap;
|
||||
* website: http://phonegap.com
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* “Software”), to deal in the Software without restriction, including
|
||||
* Software), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
@@ -13,7 +13,7 @@ package com.nitobi.phonegap;
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,
|
||||
* THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
@@ -24,17 +24,14 @@ package com.nitobi.phonegap;
|
||||
import java.io.IOException;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.IntentFilter;
|
||||
import android.hardware.SensorManager;
|
||||
import android.location.Location;
|
||||
import android.location.LocationManager;
|
||||
import android.location.LocationListener;
|
||||
import android.location.LocationProvider;
|
||||
import android.media.MediaPlayer;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Vibrator;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.util.Log;
|
||||
import android.webkit.WebView;
|
||||
|
||||
public class PhoneGap{
|
||||
@@ -51,6 +48,7 @@ public class PhoneGap{
|
||||
private GpsListener mGps;
|
||||
private NetworkListener mNetwork;
|
||||
protected LocationProvider provider;
|
||||
SmsListener mSmsListener;
|
||||
|
||||
public PhoneGap(Context ctx, Handler handler, WebView appView) {
|
||||
this.mCtx = ctx;
|
||||
@@ -58,6 +56,7 @@ public class PhoneGap{
|
||||
this.mAppView = appView;
|
||||
mGps = new GpsListener(ctx);
|
||||
mNetwork = new NetworkListener(ctx);
|
||||
mSmsListener = new SmsListener(ctx,mAppView);
|
||||
}
|
||||
|
||||
public void updateAccel(){
|
||||
@@ -155,11 +154,7 @@ public class PhoneGap{
|
||||
mp.prepare();
|
||||
mp.start();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//mp.setDataSource("file:///android_asset/" + filename);
|
||||
//mp.setDataSource("http://ventrix.nsdc.gr/stuff/TERMITES_SKONH.mp3");
|
||||
mp.prepare();
|
||||
@@ -214,5 +209,29 @@ public class PhoneGap{
|
||||
return version;
|
||||
}
|
||||
|
||||
public void notificationWatchPosition(String filter)
|
||||
/**
|
||||
* Starts the listener for incoming notifications of type filter
|
||||
* TODO: JavaScript Call backs for success and error handling. More filter types.
|
||||
*/
|
||||
{
|
||||
if (filter.contains("SMS"))
|
||||
{
|
||||
IntentFilter mFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
|
||||
mCtx.registerReceiver(mSmsListener,mFilter);
|
||||
}
|
||||
}
|
||||
|
||||
public void notificationClearWatch(String filter)
|
||||
/**
|
||||
* Stops the listener for incoming notifications of type filter
|
||||
* TODO: JavaScript Call backs for success and error handling
|
||||
*/
|
||||
{
|
||||
if (filter.contains("SMS"))
|
||||
{
|
||||
mCtx.unregisterReceiver(mSmsListener);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
package com.nitobi.phonegap;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.telephony.gsm.SmsMessage;
|
||||
import android.util.Log;
|
||||
import android.webkit.WebView;
|
||||
|
||||
public class SmsListener extends BroadcastReceiver
|
||||
{
|
||||
private WebView mAppView;
|
||||
|
||||
public SmsListener(Context ctx, WebView mAppView)
|
||||
{
|
||||
this.mAppView = mAppView;
|
||||
}
|
||||
|
||||
String ACTION = "android.provider.Telephony.SMS_RECEIVED";
|
||||
|
||||
public void onReceive(Context ctx, Intent intent)
|
||||
{
|
||||
SmsMessage[] msg;
|
||||
if (intent.getAction().equals(ACTION))
|
||||
{
|
||||
msg = getMessagesFromIntent(intent);
|
||||
String smsContent = null;
|
||||
String sendersNumber = null;
|
||||
for(int i=0; i < msg.length; i++)
|
||||
{
|
||||
sendersNumber = msg[i].getDisplayOriginatingAddress();
|
||||
smsContent = msg[i].getDisplayMessageBody();
|
||||
}
|
||||
onReceiveSMS(sendersNumber, smsContent);
|
||||
}
|
||||
}
|
||||
|
||||
public void onReceiveSMS(String sendersNumber, String smsContent)
|
||||
/**
|
||||
* Call back to Java Script
|
||||
*/
|
||||
{
|
||||
mAppView.loadUrl("javascript:onReceiveSms('"+sendersNumber+"',"+"'"+ smsContent +"'"+")");
|
||||
}
|
||||
|
||||
private SmsMessage[] getMessagesFromIntent(Intent intent)
|
||||
{
|
||||
SmsMessage retMsgs[] = null;
|
||||
Bundle bdl = intent.getExtras();
|
||||
try
|
||||
{
|
||||
Object pdus[] = (Object [])bdl.get("pdus");
|
||||
retMsgs = new SmsMessage[pdus.length];
|
||||
for(int n=0; n < pdus.length; n++)
|
||||
{
|
||||
byte[] byteData = (byte[])pdus[n];
|
||||
retMsgs[n] = SmsMessage.createFromPdu(byteData);
|
||||
}
|
||||
} catch(Exception e)
|
||||
{
|
||||
Log.e("SMS_getMessagesFromIntent", "fail", e);
|
||||
}
|
||||
return retMsgs;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user