我正在编写一个小部件,只要用户更改振铃器音量或振动设置,就需要更新.
捕获android.media.VIBRATE_SETTING_CHANGED对于振动设置工作得很好,但我没有找到任何方式在铃声音量变化时得到通知,虽然我可以尝试捕捉当用户按下音量增大/音量减小物理键时,还有很多其他选项在不使用这些键的情况下更改音量.
你知道是否有任何广播行动为此定义或以任何方式创建一个或没有它解决问题?
我想知道是否有办法知道呼叫的内容提供商是否已经改变.我的意思是,如果我拨打电话,或者我接听电话,它会返回一个"标志",表示已将新日志添加到呼叫日志中,或者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)