Browse Source

fix

pull/123/head
Yafeng Wang 7 months ago
parent
commit
9527a34cec
  1. 4
      .gitignore
  2. 18
      android/app/build.gradle
  3. 39
      android/app/google-services.json
  4. 34
      android/app/src/main/AndroidManifest.xml
  5. 2
      android/app/src/main/java/com/vernu/sms/AppConstants.java
  6. 104
      android/app/src/main/java/com/vernu/sms/receivers/SMSBroadcastReceiver.java
  7. 10
      android/build.gradle

4
.gitignore

@ -1,3 +1,7 @@
.vercel
.DS_Store
*-monitor
android/key.properties
.idea/
*.keystore
android/app/google-services.json

18
android/app/build.gradle

@ -4,11 +4,26 @@ plugins {
id 'com.google.firebase.crashlytics'
}
def keyPropertiesFile = rootProject.file("key.properties")
def keyProperties = new Properties()
if (keyPropertiesFile.exists()) {
keyProperties.load(new FileInputStream(keyPropertiesFile))
}
android {
compileSdk 32
signingConfigs {
release {
storeFile keyProperties.containsKey('storeFile') ? file(keyProperties['storeFile']) : null
storePassword keyProperties['storePassword']
keyAlias keyProperties['keyAlias']
keyPassword keyProperties['keyPassword']
}
}
defaultConfig {
applicationId "com.vernu.sms"
applicationId "com.vernu.textbee"
minSdk 24
targetSdk 32
versionCode 15
@ -25,6 +40,7 @@ android {
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}

39
android/app/google-services.json

@ -1,39 +0,0 @@
{
"project_info": {
"project_number": "14326313838",
"project_id": "vernu-sms",
"storage_bucket": "vernu-sms.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:14326313838:android:4ea4380d88b057e9eb877f",
"android_client_info": {
"package_name": "com.vernu.sms"
}
},
"oauth_client": [
{
"client_id": "14326313838-0kmpefogqk8h5ntf2mth4e9cht9pbfai.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyDNZP2HeVPZ6_V9oq2UTYWmJ4FfenrRBIQ"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "14326313838-0kmpefogqk8h5ntf2mth4e9cht9pbfai.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
}
],
"configuration_version": "1"
}

34
android/app/src/main/AndroidManifest.xml

@ -11,10 +11,13 @@
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.provider.Telephony.SMS_RECEIVED" />
<!-- <uses-permission android:name="android.provider.Telephony.SMS_RECEIVED" /> -->
<uses-permission android:name="android.permission.RECEIVE_WAP_PUSH"/>
<uses-permission android:name="android.permission.RECEIVE_MMS"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<application
android:name=".SMSGatewayApplication"
android:allowBackup="true"
@ -43,12 +46,31 @@
android:enabled="true"
android:exported="false">
</service>
<service
android:name=".services.RespondViaMessageService"
android:exported="true"
android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE">
<intent-filter>
<action android:name="android.intent.action.RESPOND_VIA_MESSAGE"/>
<data android:scheme="smsto"/>
</intent-filter>
</service>
<receiver
android:name=".receivers.SMSBroadcastReceiver"
android:exported="true">
android:exported="true"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter
android:priority="2147483647">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
<action android:name="android.provider.Telephony.SMS_DELIVER"/>
</intent-filter>
</receiver>
<receiver
android:name=".receivers.WapPushDeliverReceiver"
android:exported="true"
android:permission="android.permission.BROADCAST_WAP_PUSH">
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.WAP_PUSH_DELIVER"/>
<data android:mimeType="application/vnd.wap.mms-message"/>
</intent-filter>
</receiver>
@ -79,7 +101,13 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SENDTO"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="smsto"/>
</intent-filter>
</activity>
<activity
android:name="com.journeyapps.barcodescanner.CaptureActivity"
android:screenOrientation="portrait"

2
android/app/src/main/java/com/vernu/sms/AppConstants.java

@ -3,7 +3,7 @@ package com.vernu.sms;
import android.Manifest;
public class AppConstants {
public static final String API_BASE_URL = "https://api.textbee.dev/api/v1/";
public static final String API_BASE_URL = "http://192.168.1.240:4001/api/v1/";
public static final String[] requiredPermissions = new String[]{
Manifest.permission.SEND_SMS,
Manifest.permission.READ_SMS,

104
android/app/src/main/java/com/vernu/sms/receivers/SMSBroadcastReceiver.java

@ -1,6 +1,7 @@
package com.vernu.sms.receivers;
import android.content.BroadcastReceiver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.provider.Telephony;
@ -19,54 +20,75 @@ public class SMSBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive: " + intent.getAction());
Log.d(TAG, "********** SMSBroadcastReceiver START **********");
try {
Log.d(TAG, "Intent Action: " + intent.getAction());
if (!Objects.equals(intent.getAction(), Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) {
Log.d(TAG, "Not Valid intent");
return;
}
if (!Objects.equals(intent.getAction(), Telephony.Sms.Intents.SMS_DELIVER_ACTION)) {
Log.d(TAG, "Not SMS_DELIVER_ACTION intent, ignoring.");
return;
}
SmsMessage[] messages = Telephony.Sms.Intents.getMessagesFromIntent(intent);
if (messages == null) {
Log.d(TAG, "No messages found");
return;
}
SmsMessage[] messages = Telephony.Sms.Intents.getMessagesFromIntent(intent);
if (messages == null || messages.length == 0) {
Log.d(TAG, "No messages found in intent.");
return;
}
Log.d(TAG, "Found " + messages.length + " message parts.");
String deviceId = SharedPreferenceHelper.getSharedPreferenceString(context, AppConstants.SHARED_PREFS_DEVICE_ID_KEY, "");
String apiKey = SharedPreferenceHelper.getSharedPreferenceString(context, AppConstants.SHARED_PREFS_API_KEY_KEY, "");
boolean receiveSMSEnabled = SharedPreferenceHelper.getSharedPreferenceBoolean(context, AppConstants.SHARED_PREFS_RECEIVE_SMS_ENABLED_KEY, false);
String deviceId = SharedPreferenceHelper.getSharedPreferenceString(context, AppConstants.SHARED_PREFS_DEVICE_ID_KEY, "");
String apiKey = SharedPreferenceHelper.getSharedPreferenceString(context, AppConstants.SHARED_PREFS_API_KEY_KEY, "");
boolean receiveSMSEnabled = SharedPreferenceHelper.getSharedPreferenceBoolean(context, AppConstants.SHARED_PREFS_RECEIVE_SMS_ENABLED_KEY, false);
if (deviceId.isEmpty() || apiKey.isEmpty() || !receiveSMSEnabled) {
Log.d(TAG, "Device ID or API Key is empty or Receive SMS Feature is disabled");
return;
}
Log.d(TAG, "Device ID: " + deviceId);
Log.d(TAG, "API Key: " + apiKey);
Log.d(TAG, "Receive SMS Enabled: " + receiveSMSEnabled);
// SMS receivedSMS = new SMS();
// receivedSMS.setType("RECEIVED");
// for (SmsMessage message : messages) {
// receivedSMS.setMessage(receivedSMS.getMessage() + message.getMessageBody());
// receivedSMS.setSender(message.getOriginatingAddress());
// receivedSMS.setReceivedAt(new Date(message.getTimestampMillis()));
// }
if (deviceId.isEmpty() || apiKey.isEmpty() || !receiveSMSEnabled) {
Log.d(TAG, "Device ID or API Key is empty or Receive SMS Feature is disabled. Aborting.");
return;
}
SMSDTO receivedSMSDTO = new SMSDTO();
SMSDTO receivedSMSDTO = new SMSDTO();
receivedSMSDTO.setMessage("");
for (SmsMessage message : messages) {
receivedSMSDTO.setMessage(receivedSMSDTO.getMessage() + message.getMessageBody());
receivedSMSDTO.setSender(message.getOriginatingAddress());
receivedSMSDTO.setReceivedAtInMillis(message.getTimestampMillis());
}
// receivedSMSDTO.setSender(receivedSMS.getSender());
// receivedSMSDTO.setMessage(receivedSMS.getMessage());
// receivedSMSDTO.setReceivedAt(receivedSMS.getReceivedAt());
StringBuilder messageBody = new StringBuilder();
String originatingAddress = null;
long timestampMillis = 0;
SMSReceivedWorker.enqueueWork(context, deviceId, apiKey, receivedSMSDTO);
}
for (SmsMessage message : messages) {
messageBody.append(message.getMessageBody());
if (originatingAddress == null) {
originatingAddress = message.getOriginatingAddress();
}
if (timestampMillis == 0) {
timestampMillis = message.getTimestampMillis();
}
}
receivedSMSDTO.setMessage(messageBody.toString());
receivedSMSDTO.setSender(originatingAddress);
receivedSMSDTO.setReceivedAtInMillis(timestampMillis);
// private void updateLocalReceivedSMS(SMS localReceivedSMS, Context context) {
// Executors.newSingleThreadExecutor().execute(() -> {
// AppDatabase appDatabase = AppDatabase.getInstance(context);
// appDatabase.localReceivedSMSDao().insertAll(localReceivedSMS);
// });
// }
Log.d(TAG, "Assembled SMS DTO: " + receivedSMSDTO.toString());
ContentValues values = new ContentValues();
values.put(Telephony.Sms.ADDRESS, receivedSMSDTO.getSender());
values.put(Telephony.Sms.BODY, receivedSMSDTO.getMessage());
values.put(Telephony.Sms.DATE, receivedSMSDTO.getReceivedAtInMillis());
Log.d(TAG, "Inserting SMS into Inbox...");
context.getContentResolver().insert(Telephony.Sms.Inbox.CONTENT_URI, values);
Log.d(TAG, "SMS inserted into Inbox.");
Log.d(TAG, "Enqueuing SMSReceivedWorker...");
SMSReceivedWorker.enqueueWork(context, deviceId, apiKey, receivedSMSDTO);
Log.d(TAG, "SMSReceivedWorker enqueued.");
} catch (Exception e) {
Log.e(TAG, "An error occurred in SMSBroadcastReceiver", e);
} finally {
Log.d(TAG, "********** SMSBroadcastReceiver END **********");
}
}
}

10
android/build.gradle

@ -1,8 +1,16 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.6.0'
dependencies {
classpath 'com.google.gms:google-services:4.3.10'
}
}
plugins {
id 'com.android.application' version '7.1.2' apply false
id 'com.android.library' version '7.1.2' apply false
id 'com.google.gms.google-services' version '4.3.10' apply true
id 'com.google.gms.google-services' version '4.3.10' apply false
id 'com.google.firebase.crashlytics' version '2.9.9' apply false
}

Loading…
Cancel
Save