小编Vin*_*lya的帖子

如何使用NanoHTTPD在SD卡上提供文件(在Android内部)

我用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 nanohttpd

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

如何在Android应用程序中嵌入一个Http服务器(如i-Jetty,Paw等)

如何在我的Android应用程序中集成HTTP服务器(如iJetty,Paw等)?我在互联网上找不到任何有用的教程.大多数网站(包括官方网站)只提供服务器规范和可下载的服务器jar文件.我正在寻找一些Java代码来将该文件集成到我的Eclipse项目中,以便它可以在我的应用程序中用作服务器组件.有什么帮助吗?

android httpserver

11
推荐指数
1
解决办法
7144
查看次数

执行shell命令并在TextView中获取输出

我想执行一些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)

shell android su scrollview android-logcat

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

如何使用NanoHttpd响应发送文件名

我已经使用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)

谢谢你的帮助!

filenames httpresponse http-headers nanohttpd

5
推荐指数
1
解决办法
3073
查看次数

Android:从姓名缩写创建联系人缩略图

我有一个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

5
推荐指数
1
解决办法
3497
查看次数

在 Android Touch 事件中看不到点击涟漪效应

我在这里看到了一些解决方案,但没有一个对我有用。我正在使用View.OnTouchListener类来检测我的应用程序代码中的单击和拖动事件。但是那个美丽的涟漪效应现在已经消失了(也许是因为我在MotionEvent手势到达View.OnClickListener. 注意return trueinMotionEvent.ACTION_DOWN块之前消耗了这些手势)。

我不能View.OnClickListener用来检测点击事件,因为我的应用程序使用多个复合手势(点击、点击、点击、点击、拖动等)。任何人都可以分享一些有关如何使用 Android 触摸手势创建涟漪效果的提示吗?

这是我View.OnTouchListenerBaseAdapter类中实现的代码片段:

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

5
推荐指数
1
解决办法
1274
查看次数

RecyclerView 的 OnClickListener

与 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)

由于某种原因,我无法让这段代码工作。点击事件根本没有注册!有人可以告诉我我做错了什么吗?我已经看到了一些解决方案,但我认为这应该可行。感谢您的帮助!

android view onclicklistener android-recyclerview

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

通过Java套接字传输大文件

我已经编写了一个小的客户端-服务器代码来传输小文件。它使用数据输出流和数据输入流的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)

java sockets android large-files

3
推荐指数
2
解决办法
9472
查看次数

无法识别WhatsApp联系人

我正在尝试编写一个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

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

无法在bash脚本中运行adb命令

我正在尝试从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)

bash shell android adb ubuntu-12.04

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