Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Xamarin和C导入数据库的SMS阅读器#_C#_Android_Database_Xamarin_Sms - Fatal编程技术网

C# 使用Xamarin和C导入数据库的SMS阅读器#

C# 使用Xamarin和C导入数据库的SMS阅读器#,c#,android,database,xamarin,sms,C#,Android,Database,Xamarin,Sms,我正在开发一个Android应用程序,可以读取任何收到的短信,并将其发布到在线数据库中。我希望所有这些都发生在后台,这样就不会涉及UI。只有一个接收器和一个意向服务 所以我尝试的是创建一个广播接收器,它将查找收到的短信,一旦找到,它将启动一个服务,将短信发布到数据库中。我设法让它与另一个代码打开的UI一起工作。但我希望这是可能的,而不必打开我的应用程序 这是我现在的代码。有什么不对劲吗?值得一提的是,如果我打开应用程序并收到一条消息,那么应用程序就会崩溃!如果有人能帮助我,我将非常感激 SmsR

我正在开发一个Android应用程序,可以读取任何收到的短信,并将其发布到在线数据库中。我希望所有这些都发生在后台,这样就不会涉及UI。只有一个接收器和一个意向服务

所以我尝试的是创建一个广播接收器,它将查找收到的短信,一旦找到,它将启动一个服务,将短信发布到数据库中。我设法让它与另一个代码打开的UI一起工作。但我希望这是可能的,而不必打开我的应用程序

这是我现在的代码。有什么不对劲吗?值得一提的是,如果我打开应用程序并收到一条消息,那么应用程序就会崩溃!如果有人能帮助我,我将非常感激

SmsReciever(我知道我写错了)

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>

是的,你做错了什么

接收器

不要手动将服务添加到您的
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>