Подскажите пожалуйста, Пытаюсь сохранить данные с фонового процесса в базу данных, и при создании базы данных выдаёт ошибку. Error:(34, 41) error: incompatible types: cannot be converted to Context
Создание базы данных
public class DBHelper extends SQLiteOpenHelper {
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "phoneKey";
public static final String TABLE_CONTACTS = "PhoneKEY";
public static final String KEY_ID = "_id";
public static final String KEY_PHONE = "phone";
public static final String KEY_KLUCH = "kluch";
public DBHelper(BroadcastReceiver context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_CONTACTS + "(" + KEY_ID
+ " integer primary key," + KEY_PHONE + " text," + KEY_KLUCH + " text" + ")");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists " + TABLE_CONTACTS);
onCreate(db);
}
}
Фоновый процесс
public class MessageReceiver extends BroadcastReceiver {
private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
DBHelper dbHelper;
@Override
public void onReceive(Context context, Intent intent) {
dbHelper=new DBHelper(this);
SQLiteDatabase database = dbHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
Bundle bundle = intent.getExtras();
SmsMessage[] messages;
String str = "";
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
messages = new SmsMessage[pdus != null ? pdus.length : 0];
String phone="";
String message="";
for (int i = 0; i < messages.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) (pdus != null ? pdus[i] : null));
//1-адресс приходс сообщения
str += messages[i].getOriginatingAddress();
str += ": ";
//2-само сообщение
str += messages[i].getMessageBody();
str += "\n";
phone=messages[i].getOriginatingAddress();
message=messages[i].getMessageBody();
Cursor cur = database.query(DBHelper.TABLE_CONTACTS, new String[] {"_id", DBHelper.KEY_PHONE}, null, new String[] {}, null, null, null);
boolean k=cur.moveToFirst();
if (k==false) {
Log.i(TAG, "базза пуста");
contentValues.put(DBHelper.KEY_PHONE, phone);
contentValues.put(DBHelper.KEY_KLUCH, message);
database.insert(DBHelper.TABLE_CONTACTS, null, contentValues);
} else {
database.delete(DBHelper.TABLE_CONTACTS, DBHelper.KEY_ID, null);
}
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
// Intent intent1 = new Intent(context, MainActivity.class);
// intent1.putExtra("message", str);
// context.startActivity(intent);
Intent broadcastIntent = new Intent();
broadcastIntent.setAction("SMS_RECEIVED_ACTION");
broadcastIntent.putExtra("message", str);
context.sendBroadcast(broadcastIntent);
// }
}
abortBroadcast();
}
} }
класс Activity
public class MainActivity extends Activity {
Button btnSend;
EditText tvMessage;
EditText tvNumber;
IntentFilter intentFilter;
DBHelper dbHelper;
public BroadcastReceiver intentReciever=new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
dbHelper = new DBHelper(this);
SQLiteDatabase database = dbHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
Cursor cursorrrr = database.query(DBHelper.TABLE_CONTACTS, new String[] {"_id", DBHelper.KEY_PHONE}, DBHelper.KEY_PHONE + " = ?", new String[] {}, null, null, null);
int phone = cursorrrr.getColumnIndex(DBHelper.KEY_PHONE);
String telephone=cursorrrr.getString(phone);
Cursor cursorrr = database.query(DBHelper.TABLE_CONTACTS, new String[] {"_id", DBHelper.KEY_KLUCH}, DBHelper.KEY_PHONE + " = ?", new String[] {telephone}, null, null, null);
int key = cursorrr.getColumnIndex(DBHelper.KEY_KLUCH);
String kluch=cursorrrr.getString(key);
TextView inTxt=(TextView) findViewById(R.id.textMsg);
inTxt.setText(telephone+" "+kluch);
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter=new IntentFilter();
intentFilter.addAction("SMS_RECEIVED_ACTION");
btnSend=(Button)findViewById(R.id.btnSend);
tvMessage=(EditText)findViewById(R.id.tvMessage);
tvNumber=(EditText) findViewById(R.id.tvNumber);
btnSend.setOnClickListener(mCorkyListener);
}
private View.OnClickListener mCorkyListener = new View.OnClickListener() {
public void onClick(View v) {
String myMsg=tvMessage.getText().toString();
String theNumber=tvNumber.getText().toString();
sendMsg(theNumber, myMsg);
}};
private void sendMsg(String theNumber, String myMsg) {
String SENT="Message Sent";
String DELIVERED="Message Delivered";
PendingIntent sentPI=PendingIntent.getBroadcast(this, 0, new Intent(SENT),0);
PendingIntent deliveredPI=PendingIntent.getBroadcast(this,0,new Intent(DELIVERED),0);
//myMsg-сообщение на отправку
android.telephony.SmsManager sms= android.telephony.SmsManager.getDefault();
sms.sendTextMessage(theNumber, null, myMsg,sentPI,deliveredPI);
}
@Override
protected void onResume(){
registerReceiver(intentReciever, intentFilter);
super.onResume();
}
@Override
protected void onPause(){
unregisterReceiver(intentReciever);
super.onPause();
}
}
Класс для работы с БД принимает контекст, а не ресивер:
Т.е. вместо
public DBHelper(BroadcastReceiver context)
должно быть
public DBHelper(Context context)
Виртуальный выделенный сервер (VDS) становится отличным выбором
Добрый день! Подскажите, как в android Studio правильно написать правило для исключения из обфускации всего пакета с классами?
Есть сервис, который имеет свойства ViewOnTouchListener Дальше при создании сервиса: