相关疑难解决方法(0)

如何为呼叫日志实现ContentObserver

我想知道是否有办法知道呼叫的内容提供商是否已经改变.我的意思是,如果我拨打电话,或者我接听电话,它会返回一个"标志",表示已将新日志添加到呼叫日志中,或者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)

android calllog android-contentprovider

25
推荐指数
1
解决办法
3万
查看次数

我可以收听GPS变化吗?

我正在编写应用程序,它基于GPS收集位置数据.我有下一个问题:当我尝试获取GPS数据并关闭GPS时,我会显示要求打开GPS的通知,然后以"ACTION_LOCATION_SOURCE_SETTINGS"开始(当然点击)意图.问题:我怎么知道用户打开了它?是否有一些广播的动作,或者我可以设置一些听众,或其他什么?

android

3
推荐指数
1
解决办法
4339
查看次数

如何从状态栏检测方向更改

在状态栏下,有五个按钮 - 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

3
推荐指数
1
解决办法
3513
查看次数