Articles of android

即使使用Lock,Wifi也会睡觉

总结:即使获得wifi锁定,当手机使用电池运行时,WiFi会在一段时间后断开连接。 我已经使用启动线程的按钮将问题简化为单个活动。 它只发送100.000个字符串到PC上运行的echo服务器(每100ms一个字符串)。 见下面的代码。 我可以通过WireShark查看流量,并且echo服务器也会显示字符串。 注意在开始发送之前(当然是在发布之后)如何获取WiFi和电源锁。 但是,当手机使用电池运行并且用户关闭手机时,它会继续发送字符串一段时间,然后WiFi断开连接,手机甚至不响应ping。 从600s到6000s需要断开连接(数字是那么圆,所以我认为它们很重要)。 它在A / C连接时非常有效,所以我猜它与电源管理有某种关系。 为了测试它我只是启动活动,启动echo服务器,启动WireShark,按“开始”按钮( android:onClick=”doStart” ),阻止手机并将其放在桌面上。 我去吃午餐或其他什么,经过600-6000s我可以看到WireShark上的tx错误,echo服务器已经停止接收流量而手机没有响应ping。 手机是2.2,WiFi政策设置为“15米后睡觉”。 package Odroid.test; import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; import java.net.Socket; import java.net.UnknownHostException; import java.util.Date; import android.app.Activity; import android.content.Context; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.PowerManager; import android.view.View; import android.widget.Button; public class Test extends Activity { PowerManager _powerManagement = null; PowerManager.WakeLock […]

为什么AndroidTestCase.getContext()。getApplicationContext()返回null?

更新2012年2月13日:接受了答案,解释说这种行为是一个错误,并注意到它似乎已经在模拟器上消失得比v 1.6更好,这使得它对我们大多数人来说都不是问题。 解决方法只是循环/hibernate,直到getContext()。getApplicationContext()返回非null。 结束更新 根据android.app.Application javadoc,我定义了一个单例(称为Database),我的所有活动都访问状态和持久数据,而Database.getDatabase(Context)通过Context.getApplicationContext()获取应用程序上下文。 当活动将自己传递给getDatabase(Context)时,此设置的工作方式与广告一致,但是当我从AndroidTestCase运行unit testing时,getApplicationContext()调用通常会返回null,尽管测试时间越长,返回非null的次数越多值。 以下代码在AndroidTestCase中重现null – 演示不需要单例。 首先,要记录app-instantiation消息,在测试中的应用程序中我定义了MyApp并将其添加到清单中。 public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); Log.i(“MYAPP”, “this=” + this); Log.i(“MYAPP”, “getAppCtx()=” + getApplicationContext()); } } 接下来,我定义了一个测试用例,用于报告AndroidTestCase.getContext()4次,由一些睡眠和一个getSharedPreferences()调用分开: public class DatabaseTest extends AndroidTestCase { public void test_exploreContext() { exploreContexts(“XPLORE1”); getContext().getSharedPreferences(“foo”, Context.MODE_PRIVATE); exploreContexts(“XPLORE2”); try { Thread.sleep(1000); } catch (InterruptedException […]

来自Android应用的NFC打印

我今天一直在做很多研究,关于是否可以在Android应用程序中实现NFC打印。 我们的客户拥有具有NFCfunction的惠普打印机,并希望在我们之前创建的应用程序中使用它,而不是使用云打印。 我们想要的是,能够自动设置关于打印本身的一些选项,如方向和比例等,所以我们可以将我们的Android设备放在打印机前面。 使用案例: 按Android应用程序中的打印按钮 创建位图 显示对话框说: “将手机靠近打印机NFC阅读器” 然后打印机打印位图,无需进一步的用户交互。 如上所述,这里的想法是我们可以在NFC消息中查看一些打印选项。 以前有没有人做过这样的事情,甚至可以在Android上使用NFC打印的自定义实现呢? 另一种解决方案是使用HP自己的function,称为EPrint。 我创建了一个测试版本,我们只创建位图,然后为EPrint应用程序创建一个intent(用户必须安装HP EPrint应用程序……)。 然后,EPrint应用程序自己find合适的打印机,然后用户必须在按下“打印”之前设置一些打印选项。 看起来似乎没有可能用意图(捆绑)调整任何打印机选项,但它可能只缺少文档? 上面的实现并不算太糟糕,因为客户端并不介意安装HP EPrint应用程序。 但NFCfunction将更为可取。 这有可能吗?

在Android中的Action Bar标题上设置OnClick Listener

我正在使用Android应用程序,我正在使用ActionBar因此有一个导航抽屉图标在ActionBar打开它和ActionBar标题。 我想在ActionBar标题上设置一个单击侦听器,以便它启动一个新的Activity并在导航抽屉图标上设置不同的单击侦听器以打开导航抽屉菜单。 我点击了导航抽屉图标,但是当我点击ActionBar标题的标题时,它也会打开导航抽屉菜单。 有没有办法在ActionBar标题上设置不同的单击侦听器。 提前致谢。

在Android中向AlertDialog添加垂直滚动条?

我想在AlertDialog中添加一个垂直滚动条,因为我的文字太长而无法在1个屏幕上显示: 我试过用: android:scrollbars=”vertical” android:scrollbarAlwaysDrawVerticalTrack=”true” 但滚动条甚至不显示? 这是我正在使用的xml布局文件: 我用以下方法调用AlertsDialog: public void onClick(View v) { switch(v.getId()){ case R.id.Button_Instructions: InstructionsDialog(); break; case R.id.Button_Exit: ExitDialog(); break; } } public void InstructionsDialog(){ AlertDialog.Builder ad = new AlertDialog.Builder(this); ad.setIcon(R.drawable.icon); ad.setTitle(“Instructions …”); ad.setView(LayoutInflater.from(this).inflate(R.layout.instructions_dialog,null)); ad.setPositiveButton(“OK”, new android.content.DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int arg1) { // OK, go back to Main menu } } […]

当AsyncTasks运行时,处理屏幕方向更改

我被这一段时间所困扰了。 当我运行单独的Thread / AsyncTask如何正确处理屏幕方向更改? 目前,我有 android:configChanges=”orientation|keyboard|keyboardHidden” 在我的AndroidManifest.xml ,但并不鼓励这样做 : 注意:应避免使用此属性,并仅将其用作最后的手段。 有关如何正确处理因配置更改而导致重新启动的信息,请阅读处理运行时更改。 此外,在2.3仿真器中 ,它在切换到landscape时起作用,但切换回portrait失败。 现在,我使用configChanges的原因是因为当用户切换方向时,我可能正在运行AsyncTask ,做一些网络流量,我不希望它停止。 有没有其他方法可以做到这一点,还是有办法修复2.3切换回肖像? 我知道onRetainNonConfigurationInstance ,但我不确定“保存” AsyncTask实例是一个好主意,主要是因为扩展AsyncTask的类不是静态的(所以它与Activity绑定) – 它需要是的,因为在onPostExecute()它调用Activity实例中的方法。

Eclipse Android项目,如何在工作区内引用库?

我按照我在这里find的一些步骤(现在找不到URL,抱歉)将Eclipse中的Android项目转换为99.9%的代码在库项目中的布局,然后我有2个其他的shell项目相同的工作区,主要是AndroidManifest.xml文件和一些资源文件。 这样做了所以我可以支持同一个项目的2个版本,在2之间只有一些小的文本/图标更改。应用程序名称也不同,所以我可以同时在Android Market上发布。 自从我这样做以来,大约每10次我编译,也许每天或每两天,我得到“dalvik错误1”和“访问已存在”(Access是我的库项目中第一个Java单元的名称) 。 为了“解决”这个问题,我将进入我正在尝试构建的存根项目的Java Build路径,并从库选项卡中删除主库中的JAR文件。 然后我可以构建没有错误。 然后一段时间(可能是1或2天),当我编译我的存根项目(而不是我的库)时,我会收到关于缺少类的错误。 所以我将回到Java Build路径并重新引入JAR文件的引用,并且在1或2天内一切都好了,然后我又回到了和以前一样的错误。 这只是一个已知的问题和我需要做的事情,还是我可以通过重构我的项目/工作区来解决? 目前我有: Lib Project – 在构建路径上只有2个库:Android 2.1和com.android.ide.eclipse.adt.LIBRARIES 使用上面的lib的第一个存根项目 – 具有与上面项目相同的2个库,有时我使用“添加JAR”来包含来自上面项目的bin \文件夹的JAR。 第二个存根项目 – 与第一个存根项目相同的库 我应该使用构建路径选项下的其他选项卡从我的“lib项目”引用JAR吗? 也许是“项目”标签,或“来源”标签? 我目前在任何其他领域都没有。 当我进入奇怪的状态时,做一个“清理项目”也没有帮助,我已经尝试了几次并在清理之间打开/关闭IDE,无法解决。 此时我们正处于最后的测试阶段,因此我的正常日常任务是: 在LIB项目中进行一次小更新(错误修复) 使用发布向导导出两个项目并更新Android Market以及我们保留APK文件的其他位置 因此,我希望这些步骤保持简单,无需打开/关闭多个工作区,或者尽可能地执行大量构建步骤。

设置Android片段的自定义字体

我一直在使用Jake Wharton的ViewPagerIndicator ,我正在尝试在我的一个片段上实现自定义字体。 我试过使用这段代码: TextView txt = (TextView) findViewById(R.id.Zipcode); Typeface font = Typeface.createFromAsset(getAssets(), “fonts/customfont.ttf”); txt.setTypeface(font); 在onCreate中,主要活动导致logcat中出现空指针exception,偶尔也会出现typeface cannot be made 。 我还尝试在onCreate和onCreateView中设置片段本身的字体,但是findViewById和getAssests()是片段范围中的未知方法。 我无法弄清楚字体是否是问题,或者我试图设置fn’t是问题所在。

Android Nougat:TextureView不支持显示背景drawable

我一直在我的Android应用程序中使用TextureView,它工作正常。 就在最近,我在Android设备上使用Android API 25(7.1.2)测试了我的代码。 相同的代码现在不起作用并抛出错误, java.lang.UnsupportedOperationException: TextureView doesn’t support displaying a background drawable 。 我知道void setBackgroundDrawable (Drawable background)已经被弃用了很长时间 ,现在它必须被删除。 但我甚至不是自己设定它。 我正在使用最新的buildTools和SDK。 所以, 我想知道为什么没有更新textureView内部实现。 这是相关的堆栈跟踪: java.lang.UnsupportedOperationException: TextureView doesn’t support displaying a background drawable at android.view.TextureView.setBackgroundDrawable(TextureView.java:315) at android.view.View.setBackground(View.java:18124) at android.view.View.(View.java:4573) at android.view.View.(View.java:4082) at android.view.TextureView.(TextureView.java:159) at com.abdulwasaetariq.xyz.ui.customView.AutoFitTextureView.(AutoFitTextureView.java:24) at com.abdulwasaetariq.xyz.ui.customView.AutoFitTextureView.(AutoFitTextureView.java:20) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) […] at java.lang.Thread.run(Thread.java:745) 这是我如何使用我的(尚未定制)自定义TextureView: 这是我的相关AutoFitTextureView.java: enter […]

如何在一个SQLite查询中获取联系人ID,电子邮件,电话号码? 联系人Android优化

我希望至少使用一个电话号码获取所有联系人,我也想要每个联系人的所有电话号码和所有电子邮件。 当前代码: // To get All Contacts having atleast one phone number. Uri uri = ContactsContract.Contacts.CONTENT_URI; String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + ” > ?”; String[] selectionArgs = new String[] {“0”}; Cursor cu = applicationContext.getContentResolver().query(uri, null, selection, selectionArgs, null); // For getting All Phone Numbers and Emails further queries : while(cu.moveToNext()){ String id = cu.getString(cu.getColumnIndex(ContactsContract.Contacts._ID)); // […]