C# 使用Xamarin和C导入数据库的SMS阅读器#
我正在开发一个Android应用程序,可以读取任何收到的短信,并将其发布到在线数据库中。我希望所有这些都发生在后台,这样就不会涉及UI。只有一个接收器和一个意向服务 所以我尝试的是创建一个广播接收器,它将查找收到的短信,一旦找到,它将启动一个服务,将短信发布到数据库中。我设法让它与另一个代码打开的UI一起工作。但我希望这是可能的,而不必打开我的应用程序 这是我现在的代码。有什么不对劲吗?值得一提的是,如果我打开应用程序并收到一条消息,那么应用程序就会崩溃!如果有人能帮助我,我将非常感激 SmsReciever(我知道我写错了) main活动(留空) AndroidManifestC# 使用Xamarin和C导入数据库的SMS阅读器#,c#,android,database,xamarin,sms,C#,Android,Database,Xamarin,Sms,我正在开发一个Android应用程序,可以读取任何收到的短信,并将其发布到在线数据库中。我希望所有这些都发生在后台,这样就不会涉及UI。只有一个接收器和一个意向服务 所以我尝试的是创建一个广播接收器,它将查找收到的短信,一旦找到,它将启动一个服务,将短信发布到数据库中。我设法让它与另一个代码打开的UI一起工作。但我希望这是可能的,而不必打开我的应用程序 这是我现在的代码。有什么不对劲吗?值得一提的是,如果我打开应用程序并收到一条消息,那么应用程序就会崩溃!如果有人能帮助我,我将非常感激 SmsR
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="Services_Log.Services_Log" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">
<uses-sdk android:minSdkVersion="16" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.BROADCAST_SMS" />
<application android:label="Services Log" android:icon="@drawable/Icon">
<receiver android:name="SmsReciever">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<receiver android:name=".SmsReciever">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
</manifest>
是的,你做错了什么 接收器 不要手动将服务添加到您的
AndroidManifest.xml
。通过使用BroadcastReceiver
、IntentFilter
和Services
属性,您告诉xamarin编译器为这些接收器、服务、活动等生成一个条目。。。在AndroidManifest中。您可以通过在obj\Debug\android
并在UI线程中运行UI内容
var handler=新处理程序(Looper.MainLooper);
handler.Post(()=>
{
MakeText(上下文,$“{smsNumber}:{smsBody}”,ToastLength.Long.Show();
});
数据库
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using MySql.Data.MySqlClient;
using System.Data;
using Android.Service;
namespace Services_Log
{
[Service]
public class SmsService : IntentService
{
public SmsService () : base("SmsService")
{
}
protected override void OnHandleIntent(Intent intent)
{
Context context = this;
Toast.MakeText(context,"Service Started", ToastLength.Long).Show();
MySqlConnection con = new MySqlConnection("Server=db4free.net;Port=3306;database=testdbs;User Id=venoom;Password=takefree1;charset=utf8");
string smsNumber = intent.GetStringExtra("sms_number");
string smsBody = intent.GetStringExtra("sms_body");
try
{
con.Open();
MySqlCommand cmd = new MySqlCommand("INSERT INTO tableTest(number,message) VALUES(@number,@message)");
cmd.Connection = con;
cmd.Parameters.AddWithValue("@number",smsNumber);
cmd.Parameters.AddWithValue("@message", smsBody);
Toast.MakeText(context, "Succsesfully uploaded to database!", ToastLength.Long).Show();
cmd.ExecuteNonQuery();
}
catch (MySqlException ex)
{
Toast.MakeText(context, ex.Message, ToastLength.Long).Show();
}
finally
{
con.Close();
}
}
}
}
切勿直接连接到远程数据库。您发布应用程序就是在泄露数据库密码!最佳实践是:始终在两者之间使用Web服务。是的,您做错了什么 接收器 不要手动将服务添加到您的
AndroidManifest.xml
。通过使用BroadcastReceiver
、IntentFilter
和Services
属性,您告诉xamarin编译器为这些接收器、服务、活动等生成一个条目。。。在AndroidManifest中。您可以通过在obj\Debug\android
并在UI线程中运行UI内容
var handler=新处理程序(Looper.MainLooper);
handler.Post(()=>
{
MakeText(上下文,$“{smsNumber}:{smsBody}”,ToastLength.Long.Show();
});
数据库
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using MySql.Data.MySqlClient;
using System.Data;
using Android.Service;
namespace Services_Log
{
[Service]
public class SmsService : IntentService
{
public SmsService () : base("SmsService")
{
}
protected override void OnHandleIntent(Intent intent)
{
Context context = this;
Toast.MakeText(context,"Service Started", ToastLength.Long).Show();
MySqlConnection con = new MySqlConnection("Server=db4free.net;Port=3306;database=testdbs;User Id=venoom;Password=takefree1;charset=utf8");
string smsNumber = intent.GetStringExtra("sms_number");
string smsBody = intent.GetStringExtra("sms_body");
try
{
con.Open();
MySqlCommand cmd = new MySqlCommand("INSERT INTO tableTest(number,message) VALUES(@number,@message)");
cmd.Connection = con;
cmd.Parameters.AddWithValue("@number",smsNumber);
cmd.Parameters.AddWithValue("@message", smsBody);
Toast.MakeText(context, "Succsesfully uploaded to database!", ToastLength.Long).Show();
cmd.ExecuteNonQuery();
}
catch (MySqlException ex)
{
Toast.MakeText(context, ex.Message, ToastLength.Long).Show();
}
finally
{
con.Close();
}
}
}
}
切勿直接连接到远程数据库。您发布应用程序就是在泄露数据库密码!最佳实践是:始终在两者之间使用Web服务
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="Services_Log.Services_Log" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">
<uses-sdk android:minSdkVersion="16" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.BROADCAST_SMS" />
<application android:label="Services Log" android:icon="@drawable/Icon">
<receiver android:name="SmsReciever">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<receiver android:name=".SmsReciever">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
</manifest>