小编Kev*_*vik的帖子

如何制作遥控应用程序?从哪儿开始?

我为Android制作远程控制应用程序时应使用的最佳框架是什么。我想要做的是类似Tony Fadel的Android和Iphone应用程序,您可以通过智能手机应用程序远程控制房屋的恒温器温度。

我打算使用套接字编程,但是不确定这是否是最佳方法。如果是这样,我将使用它,但在开始之前需要一些反馈。

如果我将一个android设备作为服务器,将另一个设备作为客户端,则每次要将客户端连接到服务器时,我仍然必须手动设置IP地址。

我试图避免必须制作一个Web应用程序,而不必制作一个php网站作为此服务器。必须保持服务器运行是太多的开销。宁愿制造类似两部Android手机或平板电脑的设备,也可以通过互联网或wifi路由器相互发送消息,而无需进行过多设置和工作。

希望对此有任何想法。我无法弄清楚巢式恒温器的工作原理(http://www.nest.com/),但这是我要复制的功能。我想知道他们是否必须对所有远程控制使用集中式服务器。如果有一种方法可以做到这一点,那就太好了。这样,我需要的只是两台Android平板电脑。

我能想到的其他示例是VOIP,例如Skype和Google Talk。我确信这些不会使用集中式服务器进行语音通话。我的需求要简单得多。没有语音或视频,只能通过互联网从一台Android设备向另一台Android设备发送短信。每个Android设备可能都将专门使用wifi。

sockets networking android

5
推荐指数
0
解决办法
1461
查看次数

ConnectivityManager空指针

在此处显示的代码中获取空指针问题.通常一个空指针是一个简单易行的修复方法,但在这种情况下,我完全迷失了原因.

nullPointer在这一行:

dataConnectionStatus = connManager.getActiveNetworkInfo().isConnected();
Run Code Online (Sandbox Code Playgroud)

下面显示的代码位于onCreate方法的开头.我之前使用过类似的代码来检查wifi连接是否处于活动状态.在这种情况下,我需要检查wifi或3g数据连接是否有效.

它与空指针崩溃的情况是当wifi和3g移动数据都被关闭时.在这种情况下如何避免null?

ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);

 boolean dataConnectionStatus = false;

if(connManager!=null){
dataConnectionStatus = connManager.getActiveNetworkInfo().isConnected(); //<-NULL
}
Run Code Online (Sandbox Code Playgroud)

android connectivity nullpointerexception

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

onTouch MotionEvent getTouchMinor 和 getTouchMajor 的结果总是完全相同,为什么?

查看文档,触摸主要和触摸次要是触摸事件的椭圆轴。一个是触摸区域的长度最长测量,另一个是触摸事件的最短测量。就像测量椭圆一样。

但是,我在几个 Android 平板电脑上测试了 getTouchMajor 和 getTouchMinor 方法的这段代码。并通过放下我的手指来做到这一点,以便触摸屏幕的表面积在一个方向上会更长,因此它不会是一个圆圈。这样最大和最小数字不应该相同。

问题是,无论在触地事件中触摸屏幕的区域是什么形状,两者的浮点数始终是完全相同的。唯一可能的方法是触摸屏幕的手指皮肤区域是一个圆圈。

所以基本上,我已经将触摸的触摸事件区域视为圆形区域,有时更大或更小,但总是使其成为圆形,有没有任何设备可以为您提供更准确的形状?

我从这些函数中得到的唯一好的信息是触摸区域的一般大小。

为什么两个数字都一样。这不是正确的结果吗?

if(event.getAction() == MotionEvent.ACTION_DOWN){
        float x = event.getX();
        float y = event.getY();
        float touchMajor = event.getTouchMajor(); // major axis of ellipse touch area
        float touchMinor = event.getTouchMinor(); // minor axis of ellipse touch area 

      //  Toast.makeText(context, "x " +  x , Toast.LENGTH_SHORT).show();
      // Toast.makeText(context, "y " +  y , Toast.LENGTH_SHORT).show();
        Toast.makeText(context, "touchMajor " + touchMajor , Toast.LENGTH_SHORT).show();
        Toast.makeText(context, "touchMinor " +  touchMinor , Toast.LENGTH_SHORT).show();
Run Code Online (Sandbox Code Playgroud)

android touch ontouchlistener

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

如何将自定义视图放在自定义视图组/布局中

自定义视图组中的自定义视图不可见,我怎样才能让它显示出来?或者有没有更好的方法来做到这一点?

没有编译或运行时错误,但视图没有显示在 viewGroup 中,它应该像其他视图一样用颜色填充该区域,但它是白色的,并且视图的颜色没有显示在 CustomLayout 内部

xml 代码,前 2 个视图显示没有问题,但嵌套在 CustomLayout 内部的第 3 个视图没有显示,只有白色区域,里面的视图不可见

CustomViewOne 是一个单独的类文件,CustomViewTwo 和 CustomViewThree 都作为静态内部类嵌套在 MainActivity 类中,CustomLayout 是一个单独的文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >

<com.example.customviewexample.CustomViewOne
    android:layout_width="100dp"
    android:layout_height="50dp" />

<view 
    class="com.example.customviewexample.MainActivity$CustomViewTwo"
    android:layout_width="100dp"
    android:layout_height="50dp" />

<com.example.customviewexample.CustomLayout
    android:layout_width="100dp"
    android:layout_height="50dp">

    <view 
        class="com.example.customviewexample.MainActivity$CustomViewThree"
           android:layout_width="match_parent"
           android:layout_height="match_parent" />

</com.example.customviewexample.CustomLayout>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

这是 CustomViewThree 的代码,与其他自定义视图一样简单,它只是用颜色填充区域,它嵌套在 MainActivity 内部,因此您必须使用 MainActivity$CustomViewThree 来访问它。

public static class CustomViewThree extends View {

public CustomViewThree(Context context) {
    super(context);

}

public CustomViewThree(Context context, AttributeSet attrs) {
    super(context, attrs);

}

public CustomViewThree(Context …
Run Code Online (Sandbox Code Playgroud)

user-interface android android-custom-view

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

如何在服务中放置一个onclick监听器

我试图将此onClick监听器放在服务中,以便button在xml通知栏内的自定义视图中注册来自a的点击.但onClickListener得到编译错误.有谁知道为什么编译错误存在?

   RemoteViews remoteviews = new RemoteViews("com.example.test", R.layout.custom_notifications);

     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(AudioService.this)
               .setContent(remoteviews)
                .setSmallIcon(R.drawable.ic_launcher)
                .setContentTitle("My notification")
                .setContentText("Hello World!")
                .setOngoing(true);



     remoteviews.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {

        Toast.makeText(AudioViewer.this, "play button was clicked", Toast.LENGTH_LONG).show();
            }
        });
Run Code Online (Sandbox Code Playgroud)

编译器出错如下图所示:

在此输入图像描述

service android onclick android-notifications onclicklistener

4
推荐指数
1
解决办法
3978
查看次数

在SQLite数据库中显式关闭Cursor,需要还是不需要?

据我所知,在数据库关闭后,光标变为"无效",是否同时关闭光标?这是否避免必须执行下面显示的操作?

例1

 public void String getResultsAndReturnString() {
      String result = "";
      SQLiteDatabase db = dbHelper.getReadableDatabase();
      Cursor cursor = qb.query(db, projection, null, null,
                    null, null, null);
      cursor.close();  <-- explicit cursor close example one
      db.close();
     return result;
  }
Run Code Online (Sandbox Code Playgroud)

例2

public void Cursor getResultsAndReturnCursor(){
   SQLiteDatabase db = dbHelper.getReadableDatabase();
   Cursor cursor = qb.query(db, projection, null, null,
                    null, null, null);
   return cursor;
}

public void closeOut(Cursor cursor, SQLiteDatabase dataBase){
     cursor.close();   <-- explicit cursor close example two
     dataBase.close();
}
Run Code Online (Sandbox Code Playgroud)

sqlite android cursor

4
推荐指数
1
解决办法
2760
查看次数

如何在没有R.raw文件的情况下在android中初始化MediaPlayer

如何在没有R.raw或某种文件的情况下在Android中初始化MediaPlayer?

如果我没有用某个文件初始化MediaPlayer,我将在运行时获得空指针异常.但是当程序启动时,没有文件路径可供使用,因为用户尚未按下按钮从SD卡中选择mp3文件.

初始化媒体播放器时,还有另一个探测器.它只需要一个R.raw类型的文件,而不是SD卡中文件的路径.如果我在R.raw目录中没有任何文件,那么我就不能用文件初始化.您似乎需要本地R.raw文件夹中的音频文件才能执行此操作.

 Mediaplayer player = MediaPlayer.create(this, R.raw.sample_music);
Run Code Online (Sandbox Code Playgroud)

有一个名为"setDataSource"的方法允许我设置文件的路径,但是我必须首先初始化MediaPlayer.

  player.setDataSource(selectedAudioPath);
Run Code Online (Sandbox Code Playgroud)

还有其他任何初始化MediaPlayer的方法吗?

audio android media-player

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

在android Activity中放置onclick侦听器的正确位置在哪里?

在android活动中放置onclick侦听器的最佳位置在哪里?我见过两种不同的方式。一种方法是将它们放在 onCreate 方法中,另一种方法是将它们放在 onCreate 方法的下方和外部。

我刚刚启动了一个新的 android 应用程序,并且对最好的地方感到困惑。

两种方式如下所示。

伪代码示例一;

oncreate 方法中的 onclick 方法

 MainActivity extends Activity{

 onCreate(){

 onClick listeners 

  } // end of onCreate method

 }  // end of MainActivity class
Run Code Online (Sandbox Code Playgroud)

伪代码示例二;

将 onclick 置于 oncreate 方法下方和外部

 MainActivity extends Activity{

 onCreate(){

 } // end of onCreate method

 onClick listeners

 }  // end of MainActivity class
Run Code Online (Sandbox Code Playgroud)

android position onclick oncreate

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

在android中将命令从Activity发送到Service

我有一个活动类和一个内置媒体播放器的服务.用户从他们想要播放的SD卡中选择mp3.我使用Intent extra将该mp3的路径从活动发送到服务.

在服务中,媒体播放器可以启动并播放用户选择的mp3.但有一个问题.如果用户按下暂停按钮,则媒体播放器应暂停并稍后在与其暂停相同的位置恢复该歌曲.如何将活动中的命令发送到应暂停歌曲的服务?

将mediaplayer实例放在Activity中更容易.这样我可以在那里放一个onclick监听器和一个按钮.对于由服务运行的媒体播放器,它在活动外部并且不能在屏幕上放置按钮以便他们推动暂停.

service android communication android-activity

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

使用Android中的SQLite将DISTINCT关键字添加到query()

在进行更复杂的SQL查询时,SQLite中query()和rawQuery()之间的区别.

例如

我想使用SQL关键字DISTINCT,所以我没有从数据库中返回任何重复项.我理解如何使用rawQuery()方法,这样你就可以在方法中放入一个实际的SQL查询语句.通过这种方式,我可以使用rawQuery制作标准的SQL语句.使用rawQuery()时,很容易将DISTINCT关键字添加到任何SQL语句中

但是,当使用此代码中显示的query()方法时,我不能只使用常规SQL语句.在这种情况下,如何使用DISTINCT关键字作为查询的一部分进行查询?或具有相同功能的东西?

            // get info from country table
            public String[] getCountries(int numberOfRows) {

                     String[] columns = new String[]{COUNTRY_NAME};
                     String[] countries = new String[numberOfRows];

                     int counter = 0;

                Cursor cursor = sqLiteDatabase.query(COUNTRY_TABLE, columns, 
                            null, null, null, null, null);

                     if (cursor != null){

                     while(cursor.moveToNext()){
         countries[counter++] = cursor.getString(cursor.getColumnIndex(COUNTRY_NAME));                                   
                    }

            }
                return countries;                        
     }
Run Code Online (Sandbox Code Playgroud)

sql database sqlite android

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