Android在广播接收机中的应用
我有一个使用数据库帮助程序的代码,它扩展了Android在广播接收机中的应用,android,Android,我有一个使用数据库帮助程序的代码,它扩展了SQLiteOpenHelper 同样在main活动中我有这个 DatabaseHelper TouliosDB=new DatabaseHelper(this); 后来 TouliosDB = new DatabaseHelper(this); 然后我有一个类扩展了BroadcastReceiver,并将其设置为基于接收到的sms导入数据。 该代码在读取sms和获取数据时工作正常 我的问题是,我不知道如何使用从main活动到BroadcastRec
SQLiteOpenHelper
同样在main活动中
我有这个
DatabaseHelper TouliosDB=new DatabaseHelper(this);
后来
TouliosDB = new DatabaseHelper(this);
然后我有一个类扩展了BroadcastReceiver,并将其设置为基于接收到的sms导入数据。
该代码在读取sms和获取数据时工作正常
我的问题是,我不知道如何使用从main活动
到BroadcastReceiver
的数据库
这是BroadcastReceiver类,我尝试使用数据库TDB
公共类收入接收器扩展广播接收器{
private static final String SMS_RECEIVED ="android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context _context, Intent _intent) {
if (_intent.getAction().equals(SMS_RECEIVED)) {
Bundle bundle = _intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
messages[i] = SmsMessage
.createFromPdu((byte[]) pdus[i]);
for (SmsMessage message : messages) {
String strPhoneNo = message.getOriginatingAddress();
String msg = message.getMessageBody();
if (msg.startsWith("02"))
{
Toast.makeText(_context, "Whats up!!", Toast.LENGTH_LONG).show();
}
if (msg.startsWith("01")){
try {
final String[] temaxismeno_sms = msg.split(":");
//eisagoghfititi(String am,String onoma,String epitheto,String examino)
// temaxismeno_sms[0] einai o kodikos eisagoghs apo to menu
//boolean perastike = myDb.eisagoghfititi(temaxismeno_sms[1],temaxismeno_sms[2],temaxismeno_sms[3],temaxismeno_sms[4]);
//if (perastike=true){
//else
//{
// Toast.makeText(_context, "H eisagwgh apetixe", Toast.LENGTH_LONG).show();
class MyBroadcast extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
HandlerThread handlerThread = new HandlerThread("database_helper");
handlerThread.start();
Handler handler = new Handler(handlerThread.getLooper());
handler.post(new Runnable() {
@Override
public void run() {
DatabaseHelper TouliosDB = new DatabaseHelper(context);
TouliosDB.eisagoghfititi(temaxismeno_sms[1],temaxismeno_sms[2],temaxismeno_sms[3],temaxismeno_sms[4]);
// have more database operation here
}
});
}
}
Toast.makeText(_context, "Egine eisagwgh fititi!!", Toast.LENGTH_LONG).show();
String message1 = "H Eisagwgh egine sthn vash.";// minima pou tha stalthei
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(strPhoneNo, null, message1, null, null);
Toast.makeText(_context, "O fititis idopiithike", Toast.LENGTH_LONG).show();
}
catch (Exception e)
{
Toast.makeText(_context, "SMS failed, please try again.",
Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}}
}
}
}
}那么您想让数据库操作在
广播的接收回调中吗?如果我理解正确的话。下面是一个简单的例子
public class MyBroadcast extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
HandlerThread handlerThread = new HandlerThread("database_helper");
handlerThread.start();
Handler handler = new Handler(handlerThread.getLooper());
handler.post(new Runnable() {
@Override
public void run() {
DatabaseHelper TDB = new DatabaseHelper(context);
TDB.eisagoghfititi(temaxismeno_sms[1],temaxismeno_sms[2],temaxismeno_sms[3],temaxismeno_sms[4]);
// have more database operation here
}
});
}
}
更复杂的方法是在onReceive
callback启动服务。并在您的服务中执行数据库操作。使用singleton模式保存每个人都可以使用的单个对象?您能给我一个示例吗?我添加了广播接收器类代码!因此,如果你能帮助我们把数据库代码,这将是伟大的@Fmetal替换行TDB.eisagoghfititi(temaxismeno_sms[1]、temaxismeno_sms[2]、temaxismeno_sms[3]、temaxismeno_sms[4])代码>使用上面的代码。好,这样就修复了导入部分(我得到了toast,但是没有在文件上创建数据库)。我更新了现在的代码,并添加了数据库代码。对不起,我知道这些都是很简单的东西,但我是新的!从你展示的代码来看,它应该可以工作。您是否检查了返回值,它是false
或true
?TouliosDB.eisagoghfitti(temaxismeno_sms[1]、temaxismeno_sms[2]、temaxismeno_sms[3]、temaxismeno_sms[4])代码>返回true。。。但是当我转到data/data/appname/时,根本没有数据库文件夹。。就像它没有被创造一样。
public class MyBroadcast extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
HandlerThread handlerThread = new HandlerThread("database_helper");
handlerThread.start();
Handler handler = new Handler(handlerThread.getLooper());
handler.post(new Runnable() {
@Override
public void run() {
DatabaseHelper TDB = new DatabaseHelper(context);
TDB.eisagoghfititi(temaxismeno_sms[1],temaxismeno_sms[2],temaxismeno_sms[3],temaxismeno_sms[4]);
// have more database operation here
}
});
}
}