Я разработал приложение, которое обращается события календаря, журналы вызовов и входящие сообщения, используя такие вещи, как это:Существует ли стандартный способ доступа к событиям календаря, журналам вызовов и сообщениям входящих сообщений?
cursor = this.contentResolver.query(CallLog.Calls.CONTENT_URI, projection, selection, null, order);
Приложение отлично работает в Galaxy SII, но когда я установил его в XPERIA U это не работал, вероятно, потому, что этот телефон управляет календарями, звонками и сообщениями по-другому. Если мне нужно разработать приложение для каждого телефона в мире, это не очень хороший бизнес. Я пробовал некоторые классы Android, такие как CalendarContract.Events
, но его уровень API слишком тяжелый, и я не хочу этого, потому что он не будет работать в большинстве телефонов. Есть ли хороший стандартный способ для этого, который работает на большом количестве устройств? Спасибо!
package bembibre.coolstar.windowsmobilewidget.backend;
import java.util.ArrayList;
import java.util.List;
import bembibre.coolstar.windowsmobilewidget.apiindependent.ApiIndependentCallLog;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.provider.CallLog;
import android.util.Log;
public class CallsContentResolver {
public static final String[] projection = {
CallLog.Calls.CACHED_NAME,
CallLog.Calls.DATE,
};
public static final String selection = "((" + CallLog.Calls.TYPE + " = " +
CallLog.Calls.MISSED_TYPE + ") AND NOT(" +
ApiIndependentCallLog.instance().CALLS_IS_READ + "))";
private static final int MAX_NUM_CALLS = 3;
private static final String order = CallLog.Calls.DATE + " DESC LIMIT " + MAX_NUM_CALLS;
private ContentResolver contentResolver;
public CallsContentResolver(Context ctx) {
this.contentResolver = ctx.getContentResolver();
}
public void readCursor(List<Call> calls, Cursor cursor){
while (cursor.moveToNext()) {
String cached_name = cursor.getString(cursor.getColumnIndex(
CallLog.Calls.CACHED_NAME)
);
long date = cursor.getLong(cursor.getColumnIndex(
CallLog.Calls.DATE)
);
Call call = new Call(cached_name, date);
calls.add(0, call);
}
}
public List<Call> getMissedCalls(){
List<Call> calls = new ArrayList<Call>();
Cursor cursor = null;
try{
cursor = this.contentResolver.query(CallLog.Calls.CONTENT_URI, projection, selection, null, order);
if(cursor.getCount() > 0) {
this.readCursor(calls, cursor);
}
}
catch(Exception e){
Log.d("EXCEPCIÓN", e.getMessage());
}
finally{
if(cursor != null){
cursor.close();
}
}
return calls;
}
}
я разработал свой код на основе Календаря поставщика и Контакты поставщика. Он работает на Galaxy S2, но не работает на XPeria U. Почему? Оба являются телефонами Android, и мои минимальные требования к уровню API выше, чем уровень API в XPeria U. – user3289695
Очень странно, ContentProviders - стандартный способ, тестирование на других устройствах. – alfdev
Когда я получаю пропущенный вызов в Галактике, ContentResolver, который я получаю таким образом: 'context.getContentResolver();', дает мне вызов, запрашивая базу данных. Но в Xperia эта база данных всегда пуста, независимо от количества пропущенных вызовов, которые у меня есть. Если каждый телефон использует другую базу данных, как я могу создать приложение, которое работает в широком диапазоне телефонов Android? Извините, я начинающий Android-программист. – user3289695