我正在创建一个Android应用程序,它将接收所有短信,进行一些处理并将其存储在数据库中,以后可以从我的应用程序中查看。
我在短信接收器类中使用Intent。主Activity将获取此Intent并将其保存到数据库。我的代码工作正常并且做了我需要的所有事情,但我唯一的问题是,每次我收到短信,我的应用程序都会启动。
我的预期行为是,当用户收到短信时,应在后台将详细信息(名称,消息和日期)添加到数据库中,而无需打开我的应用程序。我是否可以使用任何属性来抑制启动我的应用程序,还是应该删除意图并使用其他替代方法?
这是我的代码。
My SMS Receiver Class
public class SMSReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Bundle bundle = intent.getExtras();
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < messages.length; i++)
{
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
String address = messages[i].getOriginatingAddress();
String message = messages[i].getDisplayMessageBody().toString();
long time = messages[i].getTimestampMillis();
String dateFromSms = formatter.format(calendar.getTime());
Intent newintent = new Intent(context, MainActivity.class);
newintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
newintent.putExtra("address", address);
newintent.putExtra("message",
m.group(1));
newintent.putExtra("date",
time.toString());
context.startActivity(newintent);
}
}
}
My MainActivity Class
public class MainActivity extends Activity
{
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.content_main);
TransactionDataBase DB = new TransactionDataBase(this,2);
Bundle extras = getIntent().getExtras();
if (extras != null)
{
String address = extras.getString("address");
String message = extras.getString("message");
String date = extras.getString("date");
DB.addMessage(address, message, date);
}
}
}
答案 0 :(得分:3)
我唯一的问题是每次收到短信,我的应用程序都会启动
不,您的MainActivity
已启动,因为每次收到短信时,您都会在startActivity()
Intent
上拨打MainActivity
。
更糟糕的是,在该活动中,您正在主应用程序线程上进行数据库I / O.
我是否可以使用任何属性来阻止启动我的应用程序
您应该删除所有代码。
使用其他一些替代方法?
让数据库I / O由IntentService
执行,而不是Activity
。
答案 1 :(得分:0)
而不是启动活动,只需插入数据库
您需要更改onReceive
,如下所示:
@Override
public void onReceive(Context context, Intent intent)
{
Bundle bundle = intent.getExtras();
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < messages.length; i++)
{
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
String address = messages[i].getOriginatingAddress();
String message = messages[i].getDisplayMessageBody().toString();
long time = messages[i].getTimestampMillis();
String dateFromSms = formatter.format(calendar.getTime());
TransactionDataBase DB = new TransactionDataBase(context,2);
DB.addMessage(address, message, time.toString());
}
}