小编Nik*_*wal的帖子

了解Android联系人的架构

我正在开发一个Android应用程序,需要知道何时添加/更新/删除联系人.

所以我读了几篇帖子.我知道,只要联系人发生变更,我们就可以通过内容观察员获得通知,但我们无法获得添加/更新/删除的联系人.所以我已阅读官方API并准备我的设计如何捕获该特定联系人.

所以我一开始就想到了什么

  1. 我们将存储所有联系人ID,已删除标志和版本
  2. 每当联系人发生变化时,我都会从Android的系统中获取我的表的行数和行数.
  3. 如果我的rowcount小于系统行计数,则删除联系人.
  4. 如果我的rowcount大于系统行计数,则添加了联系人.
  5. 如果不是这些情况,则其中一个联系人版本已更改.

我还了解到,如果用户删除了联系人,Android不会删除联系人,但是在删除的标志上设置为0.因此在这些情况下,行数将相同.

如官方文档中所述,Android还会多次更改联系人的行ID.那么我们如何能够像查询uri一样唯一地识别它们,如果没有,那么我们也必须为它设置观察者.

所以我想知道以上是否正确?并且在添加联系人的情况下,它将被添加到游标的最后一行或不意味着如果我检查系统数据库的最后一行是否接触,它将给我添加或不添加联系人.

java android android-contacts

18
推荐指数
2
解决办法
2567
查看次数

SeekBar以编程方式

我正在以编程方式创建一个SeekBar:

SeekBar seekBar = new SeekBar(this);
seekBar.setMax(15);
seekBar.setIndeterminate(true);
seekBar.setMinimumWidth(200);

ShapeDrawable thumb = new ShapeDrawable(new OvalShape());

thumb.getPaint().setColor(0x00FF00);
thumb.setIntrinsicHeight(80);
thumb.setIntrinsicWidth(30);

seekBar.setThumb(thumb);
seekBar.setProgress(1);
Run Code Online (Sandbox Code Playgroud)

但我能看到的只是一个小的SeekBar.
可能是什么问题?

谢谢

android seekbar

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

观察Audio.Media.EXTERNAL_CONTENT_URI的Android内容观察者的更改

我正在开发一个Android应用程序,我必须检测Android SD卡中音频文件的变化,文件名,文件路径和执行的操作.例如,如果我在SD卡中添加文件,那么我想知道

  1. 添加的文件的名称
  2. 文件的路径
  3. 操作 - 添加

以前我已经尝试过文件观察器但是为此我必须在每个目录上应用它.所以我搜索了一些其他解决方案,并获得了有关Audio.Media.EXTERNAL_CONTENT_URI的信息.然后我创建了一个像这样的内容观察者

UriObserver.java - 一个内容观察者

class UriObserver extends ContentObserver {

    public UriObserver(Handler handler) {
        super(handler);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onChange(boolean selfChange) {
        // TODO Auto-generated method stub
        super.onChange(selfChange);

        Log.d("INSTANT", "GETTING CHANGES");
    }

}
Run Code Online (Sandbox Code Playgroud)

这是注册的代码

UriObserver observer = new UriObserver(new Handler());

Log.d("INSTANT", "registered content observer");

this.getApplicationContext()
    .getContentResolver()
    .registerContentObserver(
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, false,
    observer);

Log.d("INSTANT", "registered content observer");
Run Code Online (Sandbox Code Playgroud)

它让我知道在与音频文件相关的SD卡中发生了一些变化.但它没有提供有关添加,编辑或删除哪个文件的任何信息.

然后我搜索了解决方案并得到了这篇文章

Android:如何通过MTP连接时检测MediaStore中的更改

在这篇文章中,Bhiefer给出了一些代码作为答案,我认为它可以起作用,所以我试图实现它,但我无法这样做.

我能为此做些什么?

更新

我可以查询Audio.Media.EXTERNAL_CONTENT_URI的最新更改吗?这段代码:

mCursor = context.getContentResolver().query(
                    Audio.Media.EXTERNAL_CONTENT_URI, …
Run Code Online (Sandbox Code Playgroud)

android android-sdcard android-mediascanner contentobserver fileobserver

12
推荐指数
1
解决办法
8375
查看次数

Android - 使用国家/地区代码与号码联系

从传入短信中检索移动号码时,会附加国家/地区代码.
现在,因为数据库中的匹配联系人可能不包含国家代码来获取我正在使用的联系人姓名:

public static String getContactName(String number, Context context) {

    try {

        Uri personUri = Uri.withAppendedPath(
            ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number.trim()));
        String selection = PhoneLookup.NUMBER + " LIKE %" + number.trim() + "%";
        Cursor cur = context.getContentResolver().query(personUri,
            new String[] {
            PhoneLookup.DISPLAY_NAME
        },
            selection, null, null);
        if (cur.moveToFirst()) {
            String str = cur.getString(cur.getColumnIndex(PhoneLookup.DISPLAY_NAME));
            cur.close();
            return str;
        }
    } catch (Exception e) {
        //e.printStackTrace();
        return number;
    }
    return number;
}
Run Code Online (Sandbox Code Playgroud)

如果我传入完全匹配或部分匹配,这将完美地工作.但是,如果我想获取联系人ID我正在使用此代码:

public static Contact getContact(String number, ContentResolver contentResolver) {

    Contact contact = new Contact(-1, number); …
Run Code Online (Sandbox Code Playgroud)

java sql android android-contacts

11
推荐指数
2
解决办法
8804
查看次数

Android BroadcastReceiver无法接收任何广播事件

我创建了一个BroadcastReceiver来检测SDCard挂载和卸载事件,但是,我根本无法接收任何事件:这里是AndroidManifest.xml:

<receiver android:enabled="true" android:label="SDCardMountReceiver" android:exported="true" android:name="xxx.broadcasts.SDCardBroadcastReceiver">
    <intent-filter>
        <action android:name="android.content.Intent.ACTION_MEDIA_MOUNTED"></action>
        <!-- or <action android:name="android.content.Intent.ACTION_MEDIA_UNMOUNTED" />--></intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

和SDCardMountReceiver类:

public class SDCardBroadcastReceiver extends BroadcastReceiver {
    public SDCardBroadcastReceiver() {
        super();
        System.err.println("constructor");
    }

    public void onReceive(Context context, Intent intent) {
        Log.d("SDCardBroadCastReceiver", "receive " + intent.getAction());
        System.err.println("jonathan receive " + intent.getAction());

    }
}
Run Code Online (Sandbox Code Playgroud)

android broadcastreceiver

10
推荐指数
2
解决办法
2万
查看次数

Android ViewFlipper动画

我坚持一个简单的问题,这让我疯了.基本上我有2个ImageViews,我试图让第一个节目一秒钟,然后淡出显示第二个.我一直在研究使用ViewFlipper,下面的示例代码,但动画不存在.

ViewFlipper mFlipper = new ViewFlipper(this);

ImageView i = new ImageView(this);
i.setBackgroundDrawable(getResources().getDrawable(R.drawable.c1));
ImageView i2 = new ImageView(this);
i2.setBackgroundDrawable(getResources().getDrawable(R.drawable.c2));

mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
        R.anim.fade));
mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
        R.anim.fade));
mFlipper.addView(i);
mFlipper.addView(i2);
mFlipper.startFlipping();
setContentView(mFlipper);
Run Code Online (Sandbox Code Playgroud)

我不确定我是否使用viewFlipper在正确的轨道上,所以任何帮助都将非常感谢!

干杯

android

10
推荐指数
2
解决办法
4万
查看次数

计算方法调用堆栈大小以检查StackOverflowException

今天早上我回答了一个与StackoverflowException相关的问题.该人询问何时发生Stackoverflow异常

查看此链接在C#,C++和Java中导致堆栈溢出的最简单方法

所以我的问题是,有没有任何方法可以在程序中动态计算方法调用堆栈大小,然后在调用方法之前应用检查,该方法检查方法调用堆栈是否有空间来容纳它,以防止StackOverflowException.

因为我是一个java人,我正在寻找java,但也寻找与概念相关的解释,没有任何编程语言的限制.

java recursion stack callstack stack-size

10
推荐指数
2
解决办法
3939
查看次数

实现47degree android-swipelistview用于滑动android ListViewItem

实际上我的目标是在android中实现ListViewItem Swipe.我已经尝试过了,stackoverflow有几个例子可以让你的ListViewSwipe.例子.

简单的滑动手势到活动教程?

在从该列表中滑动一个项目时,在列表视图中显示按钮

有一点是每个人都在提供代码,没有人在解释发生了什么.

然后我问了它的问题Android列表视图右/左滑动像 @CommonsWare已经用SwipeListView库回答的调用日志,它具有流畅的流程然后接受的答案.接受的答案也正常工作我目前只使用它.

这是图书馆http://www.androidviews.net/2013/03/swipelistview/, 它提供了这样的列表视图

在此输入图像描述

我已经尝试了50多次来运行github上提供的示例应用程序https://github.com/47deg/android-swipelistview-sample但每次我都遇到新问题.目前即将发生的例外情况是

05-22 15:35:19.392: E/AndroidRuntime(980): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.fortysevendeg.android.swipelistview.SwipeListView" on path: /data/app/com.fortysevendeg.android.swipelistview-2.apk
Run Code Online (Sandbox Code Playgroud)

我不知道发生了什么我已经检查了buildpath,库中也包含了很多人在stackoverflow聊天但是没有得到任何帮助.

实际上在互联网上,没有一个教程可以实现我对这么多人的要求.所以我想知道是否有人使用过这个图书馆请写一个合适的答案如何预先使用它所以我和其他未来的读者也可以从中获益.

或者是否有任何其他库来执行此类功能.

正如@CommonsWare建议的那样.我已经写了一封给作者的电子邮件,也写了一个使用它的教程.

android listview swipe

10
推荐指数
2
解决办法
9274
查看次数

如何从Backbone Marionette的复合视图中获取子视图?

我正在开发基于Backbone和Marionette的应用程序.我现在使用复合视图来显示一个表我想要一起更新多个子视图所以我想要他们的对象和模型.所以要访问它们

我读了这个方法.我在复合视图对象上尝试了它们,但没有一个方法正在工作并抛出错误消息

CheckInOutCollectionView.findByIndex不是函数

如何访问子视图对象?

javascript jquery composite backbone.js marionette

10
推荐指数
1
解决办法
6080
查看次数

为什么以及何时取消注册android中的内容观察者

我正在开发一个Android应用程序,并第一次与内容观察者合作.所以我阅读了很多教程并得到了为什么提供它以及如何使用它的概念.

现在我已经在博客上阅读了这些内容

别忘了取消注册内容观察者

所以,我无法理解我是否要注册ContentObserver然后我必须取消注册的情况.

如果观察者的目的得到满足,那么它可以取消注册.但我必须观察直到用户卸载应用程序,然后我将取消注册观察者.

这是该博客的网址

http://www.grokkingandroid.com/use-contentobserver-to-listen-to-changes/

java android contentobserver

8
推荐指数
3
解决办法
5779
查看次数