我想知道是否有办法知道呼叫的内容提供商是否已经改变.我的意思是,如果我拨打电话,或者我接听电话,它会返回一个"标志",表示已将新日志添加到呼叫日志中,或者Android存储有关呼叫的信息的位置.
因为,当我拨打电话时,Android会在内容提供商中存储号码,联系人姓名(如果存在),通话时间,持续时间等等.那么有没有办法捕获这个"标志",表示呼叫的内容提供商更大,我的意思是,在内容提供商CallLog.Calls上插入了新数据.
所以,我仍然对这个问题有很多怀疑.我不知道在哪里注册内容观察者.我的意图是,当CallLog内容提供程序中的某些内容发生更改时,将使用代码的insert方法.
我的意思是,除非将新数据添加到CallLog内容提供程序,否则代码将不会执行任何操作.如果已将某些数据添加到CallLog内容提供程序,则代码将查询新数据,然后将插入.我想这样做,因为没有内容观察者,应用程序在每次运行应用程序时已经插入的数据库中插入数据,得到了吗?
所以这是我的代码.如果有人可以告诉我放在哪里registerContentObserver()以及其他所需的东西.
public class RatedCalls extends ListActivity {
private SQLiteDatabase db;
private CallDataHelper dh = null;
StringBuilder sb = new StringBuilder();
OpenHelper openHelper = new OpenHelper(RatedCalls.this);
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Cursor cursor = getContentResolver().query(
android.provider.CallLog.Calls.CONTENT_URI, null, null, null,
android.provider.CallLog.Calls.DATE + " DESC ");
dh = new CallDataHelper(this);
db = openHelper.getWritableDatabase();
startManagingCursor(cursor);
int numberColumnId = cursor.getColumnIndex(android.provider.CallLog.Calls.NUMBER);
int durationId = cursor.getColumnIndex(android.provider.CallLog.Calls.DURATION);
int contactNameId = cursor.getColumnIndex(android.provider.CallLog.Calls.CACHED_NAME);
int dateId = cursor.getColumnIndex(android.provider.CallLog.Calls.DATE);
int numTypeId = cursor.getColumnIndex(android.provider.CallLog.Calls.CACHED_NUMBER_TYPE);
Date dt …Run Code Online (Sandbox Code Playgroud) 我正在编写应用程序,它基于GPS收集位置数据.我有下一个问题:当我尝试获取GPS数据并关闭GPS时,我会显示要求打开GPS的通知,然后以"ACTION_LOCATION_SOURCE_SETTINGS"开始(当然点击)意图.问题:我怎么知道用户打开了它?是否有一些广播的动作,或者我可以设置一些听众,或其他什么?
在状态栏下,有五个按钮 - Wifi,蓝牙,GPS,静音模式和自动旋转.我还没有找到一种方法来检测用户何时单击"自动旋转"按钮.
我所做的是有一个服务,倾听方向的变化,如:
public class MyService extends Service {
@Override
public void onCreate() {
super.onCreate();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
this.registerReceiver(myReceiver, intentFilter);
}
public BroadcastReceiver myReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) {
// Show a message about orientation changes.
// This method is only called when the phone is physically rotated.
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
上述BroadcastReceiver仅在手机旋转时才有效,但如果单击"自动旋转"按钮而没有手机的任何物理旋转,则永远不会调用BroadcastReceiver方法.
我也尝试过OrientationEventListener - 但是与BroadcastReceiver方法的行为相同.
要设置方向,我使用以下方法:
Settings.System.getInt(context.getContentResolver(), "accelerometer_rotation")
Run Code Online (Sandbox Code Playgroud)
所以我知道有一种询问系统设置的方法.是否存在陷阱系统设置的[方向]更改?我已经浏览了Android文档,但找不到一个 - 也许,我正在寻找错误的地方,或者没有意图.
有没有人知道如何捕获状态栏中自动旋转按钮的更改?
更新1:我正在使用的设备是:三星Galaxy S3,三星Galaxy …
android listener orientation broadcastreceiver android-intent