我用NanoHTTPD编写了一个小型的Android服务器.它可以很好地提供HTML文件(位于sdcard/www/index.html的网页).任何人都可以帮我找出如何使用NanoHTTPD提供音频或视频文件而不是html页面?请原谅我这个问题看起来很傻,因为我是HTTP的新手!这是我的服务器端代码(我已将网页路径替换为音频文件的路径):
package com.example.zserver;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
public class MainActivity extends Activity {
private WebServer server;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
server = new WebServer();
try {
server.start();
} catch(IOException ioe) {
Log.w("Httpd", "The server could not start.");
}
Log.w("Httpd", "Web server initialized.");
}
@Override
public void onDestroy()
{
super.onDestroy();
if (server != null)
server.stop();
}
private class WebServer extends NanoHTTPD {
public …Run Code Online (Sandbox Code Playgroud) 如何在我的Android应用程序中集成HTTP服务器(如iJetty,Paw等)?我在互联网上找不到任何有用的教程.大多数网站(包括官方网站)只提供服务器规范和可下载的服务器jar文件.我正在寻找一些Java代码来将该文件集成到我的Eclipse项目中,以便它可以在我的应用程序中用作服务器组件.有什么帮助吗?
我想执行一些shell commands并获取输出TextView.该命令可能具有连续输出,如ping或logcat.此外,TextView应该在实时添加命令输出时自动滚动.为了做到这一点,我做到了这一点:
package com.example.rootapp;
import java.io.DataOutputStream;
import java.io.InputStream;
import android.app.Activity;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] cmdArray={"logcat -b radio"};
try {
runAsRoot(cmdArray);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void runAsRoot(String[] cmds) throws Exception {
tv=(TextView)findViewById(R.id.cmdOp);
tv.setMovementMethod(new ScrollingMovementMethod());
Process p = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(p.getOutputStream());
InputStream …Run Code Online (Sandbox Code Playgroud) 我已经使用NanoHttpd在本地网络上成功实现了文件传输.但是,我无法在NanoHttpd Response中发送文件名.收到的文件具有如下默认名称:localhost_8080.我尝试在响应标头中附加文件名Content-disposition,但我的文件传输失败了.我究竟做错了什么?这是我的实现:
private class WebServer extends NanoHTTPD {
String MIME_TYPE;
File file;
public WebServer() {
super(PORT);
}
@Override
public Response serve(String uri, Method method,
Map<String, String> header, Map<String, String> parameters,
Map<String, String> files) {
try {
file=new File(fileToStream);
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
MIME_TYPE= URLConnection.guessContentTypeFromName(file.getName());
} catch (IOException ioe) {
Log.w("Httpd", ioe.toString());
}
NanoHTTPD.Response res=new NanoHTTPD.Response(Status.OK, MIME_TYPE, bis);
res.addHeader("Content-Disposition: attachment; filename=", file.getName());
return res;
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
我有一个ListView包含一些电子邮件的Android .其中一些有联系人缩略图,而有些则没有.对于未知的联系人缩略图,我想创建一个位图,其中包含相应电子邮件ID的首字母.我怎样才能做到这一点?我见过一些使用这种技术的Android应用程序来显示这样的联系人缩略图:

首先,我使用以下代码:
ImageView iv=(ImageView)findViewById(R.id.imageView1);
TextView view = (TextView)findViewById(R.id.textView1);
Bitmap b=Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
view.draw(c);
iv.setImageBitmap(b);
Run Code Online (Sandbox Code Playgroud)
TextView包含一个简单的字符串.不幸的是,它不起作用.有人可以给我一些指示吗?非常感谢你的帮助!
android thumbnails bitmapimage android-layout android-imageview
我在这里看到了一些解决方案,但没有一个对我有用。我正在使用View.OnTouchListener类来检测我的应用程序代码中的单击和拖动事件。但是那个美丽的涟漪效应现在已经消失了(也许是因为我在MotionEvent手势到达View.OnClickListener. 注意return trueinMotionEvent.ACTION_DOWN块之前消耗了这些手势)。
我不能View.OnClickListener用来检测点击事件,因为我的应用程序使用多个复合手势(点击、点击、点击、点击、拖动等)。任何人都可以分享一些有关如何使用 Android 触摸手势创建涟漪效果的提示吗?
这是我View.OnTouchListener在BaseAdapter类中实现的代码片段:
v.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent ev) {
switch (ev.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
if(mAppActionDownListener != null) {
mAppActionDownListener.onAppActionDown(appObjectList.get(position), v);
}
Log.d("COOK", "ACTION_DOWN: " + ev.getX() + ", " + ev.getY());
t1 = System.currentTimeMillis();
return true;
case MotionEvent.ACTION_UP:
Log.d("COOK", "ACTION_UP: " + ev.getX() + ", " + ev.getY());
t2 = System.currentTimeMillis();
if(Math.abs(t2-t1) <=300) …Run Code Online (Sandbox Code Playgroud) user-interface android ontouchlistener android-gesture rippledrawable
与 ListView 不同,Android RecyclerView 的实现似乎太复杂了。由于 RecyclerView 子项没有 OnItemClickListener,因此我一直在尝试实现以下方法来注册单击事件:
final RecyclerView rv=(RecyclerView)findViewById(R.id.recycler_view);
LinearLayoutManager llm=new LinearLayoutManager(this);
rv.setLayoutManager(llm);
MyRVAdapter rva=new MyRVAdapter(persons);
rv.setAdapter(rva);
rv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int itemPosition = rv.indexOfChild(v);
Log.d("Tag", String.valueOf(itemPosition));
}
});
Run Code Online (Sandbox Code Playgroud)
由于某种原因,我无法让这段代码工作。点击事件根本没有注册!有人可以告诉我我做错了什么吗?我已经看到了一些解决方案,但我认为这应该可行。感谢您的帮助!
我已经编写了一个小的客户端-服务器代码来传输小文件。它使用数据输出流和数据输入流的readFully()方法。由于明显的原因,此代码不适用于较大的文件。我正在考虑将大文件碎片化为1Kb的较小块,然后再将其发送给客户端。但是我想不出任何解决方案(例如,如何在数据输出流上以正确的偏移量写入多个块,以及如何在接收端重新组装它们。任何人都可以提供解决方法吗?如果可以修改我的代码,这将非常有帮助:
发件人(服务器):
public void sendFileDOS() throws FileNotFoundException {
runOnUiThread( new Runnable() {
@Override
public void run() {
registerLog("Sending. . . Please wait. . .");
}
});
final long startTime = System.currentTimeMillis();
final File myFile= new File(filePath); //sdcard/DCIM.JPG
byte[] mybytearray = new byte[(int) myFile.length()];
FileInputStream fis = new FileInputStream(myFile);
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
try {
dis.readFully(mybytearray, 0, mybytearray.length);
OutputStream os = socket.getOutputStream();
//Sending file name and file size to the client
DataOutputStream dos = new …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个Android程序,可以识别给定的联系号码是否与WhatsApp相关联.我设法找出一个特定的联系人姓名是否有WhatsApp帐户.如何找出与该联系人姓名相对应的联系人是否有WhatsApp?目前我正在使用以下代码:
public void identifyWhatsappContact() {
Cursor c = ctx.getContentResolver().query(
RawContacts.CONTENT_URI,
new String[] { RawContacts.CONTACT_ID, RawContacts.DISPLAY_NAME_PRIMARY },
RawContacts.ACCOUNT_TYPE + "= ? AND " + StructuredName.DISPLAY_NAME_PRIMARY + " = ?",
new String[] { "com.whatsapp", "John Doe" },
null);
ArrayList<String> myWhatsappContacts = new ArrayList<String>();
int contactNameColumn = c.getColumnIndex(RawContacts.DISPLAY_NAME_PRIMARY);
while (c.moveToNext())
{
myWhatsappContacts.add(c.getString(contactNameColumn));
Log.v("WHATSAPP", c.getString(contactNameColumn)+"");
}
}
Run Code Online (Sandbox Code Playgroud)
我能够确定"John Doe"是否有WhatsApp,但我无法弄清楚"John Doe"的哪个电话号码有WhatsApp(假设联系人有多个电话号码).有人可以帮帮我吗?我已经在这里尝试过这个解决方案,但它对我不起作用.
android android-contacts android-cursor rawcontactid whatsapp
我正在尝试从adb shell启动Android网络共享设置.这样做的主要目的是通过运行shell脚本来启用USB网络共享模式.我在我的Ubuntu终端(12.04)上使用以下命令集:
adb shell
am start -n com.android.settings/.TetherSettings
sleep 7
input tap 162 159
input tap 385 607
Run Code Online (Sandbox Code Playgroud)
当命令逐个执行时,此方法可以正常工作,但我无法将它们作为普通的shell脚本运行.请帮忙!这是完整的脚本:
#!/bin/sh
adb shell
am start -n com.android.settings/.TetherSettings
sleep 7
input tap 162 159
input tap 385 607
Run Code Online (Sandbox Code Playgroud)
我想,它无法在我的系统中找到adb的路径.我已经尝试用SDK目录中的adb工具的实际路径替换第一行.那也行不通.有什么解决方法吗?(对不起,如果这个问题看起来很愚蠢.我真是个新手来编写脚本!)
编辑:更新的脚本: -
#!/bin/sh
cd /home/evinish/Documents/Android/adt-bundle-linux-x86_64-20130219/sdk/platform-tools
adb shell "
am start -n com.android.settings/.TetherSettings
sleep 7
input tap 162 159
input tap 385 607
"
Run Code Online (Sandbox Code Playgroud) android ×9
nanohttpd ×2
shell ×2
adb ×1
bash ×1
bitmapimage ×1
filenames ×1
http ×1
http-headers ×1
httpresponse ×1
httpserver ×1
java ×1
large-files ×1
rawcontactid ×1
scrollview ×1
sockets ×1
su ×1
thumbnails ×1
ubuntu-12.04 ×1
view ×1
whatsapp ×1