受信したSMSを読み込んでオンラインデータベースに投稿するAndroidアプリを開発しています。私はバックグラウンドでこれがすべて起こるように、UIは関係しません。ちょうど受信機とインテントサービス。XamarinとC#でデータベースにインポートするSMSリーダー
私が試したのは、受信したSMSを探すブロードキャストレシーバを作成し、それが見つかるとすぐにデータベースにSMSを送信するサービスを開始することです。私はこれを別のコードで開いたUIで動作させることができました。しかし、私はこれを可能にするためには、私のアプリを開かなくてもいいと思っています。
ここは私のコードです。何か間違えている?私がアプリを開いてメッセージを受け取ると、アプリがクラッシュするということが言いたいことです。誰かが私を助けることができるなら、私はそれをたくさんいただきたいと思います!
SmsReciever(私は受信機間違っを書いて知っている)
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 Android.Telephony;
using Android.Provider;
namespace Services_Log
{
[BroadcastReceiver(Enabled = true, Label = "SMS Receiver")]
[IntentFilter(new[] { "android.provider.Telephony.SMS_RECEIVED" })]
public class SmsReciever : BroadcastReceiver
{
private const string Tag = "SMSBroadcastReceiver";
private const string IntentAction = "android.provider.Telephony.SMS_RECEIVED";
public override void OnReceive(Context context, Intent intent)
{
try
{
Intent smsIntent = new Intent(context, typeof(SmsService));
if (intent.Action != IntentAction) return;
SmsMessage[] messages = Telephony.Sms.Intents.GetMessagesFromIntent(intent);
for (int i=0; i<messages.Length; i++)
{
smsIntent.PutExtra("sms_number", messages[i].OriginatingAddress);
smsIntent.PutExtra("sms_body", messages[i].MessageBody);
context.StartService(smsIntent);
}
}
catch (Exception ex)
{
Toast.MakeText(context, ex.Message, ToastLength.Long).Show();
}
}
}
}
SmsService
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();
}
}
}
}
MainActivity(左空白)
using Android.App;
using Android.Widget;
using Android.OS;
namespace Services_Log
{
[Activity(Label = "Services_Log", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
// SetContentView (Resource.Layout.Main);
}
}
}
AndroidManifest
<?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>