我为Android制作远程控制应用程序时应使用的最佳框架是什么。我想要做的是类似Tony Fadel的Android和Iphone应用程序,您可以通过智能手机应用程序远程控制房屋的恒温器温度。
我打算使用套接字编程,但是不确定这是否是最佳方法。如果是这样,我将使用它,但在开始之前需要一些反馈。
如果我将一个android设备作为服务器,将另一个设备作为客户端,则每次要将客户端连接到服务器时,我仍然必须手动设置IP地址。
我试图避免必须制作一个Web应用程序,而不必制作一个php网站作为此服务器。必须保持服务器运行是太多的开销。宁愿制造类似两部Android手机或平板电脑的设备,也可以通过互联网或wifi路由器相互发送消息,而无需进行过多设置和工作。
希望对此有任何想法。我无法弄清楚巢式恒温器的工作原理(http://www.nest.com/),但这是我要复制的功能。我想知道他们是否必须对所有远程控制使用集中式服务器。如果有一种方法可以做到这一点,那就太好了。这样,我需要的只是两台Android平板电脑。
我能想到的其他示例是VOIP,例如Skype和Google Talk。我确信这些不会使用集中式服务器进行语音通话。我的需求要简单得多。没有语音或视频,只能通过互联网从一台Android设备向另一台Android设备发送短信。每个Android设备可能都将专门使用wifi。
在此处显示的代码中获取空指针问题.通常一个空指针是一个简单易行的修复方法,但在这种情况下,我完全迷失了原因.
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 平板电脑上测试了 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) 自定义视图组中的自定义视图不可见,我怎样才能让它显示出来?或者有没有更好的方法来做到这一点?
没有编译或运行时错误,但视图没有显示在 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) 我试图将此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
据我所知,在数据库关闭后,光标变为"无效",是否同时关闭光标?这是否避免必须执行下面显示的操作?
例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) 如何在没有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的方法吗?
在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) 我有一个活动类和一个内置媒体播放器的服务.用户从他们想要播放的SD卡中选择mp3.我使用Intent extra将该mp3的路径从活动发送到服务.
在服务中,媒体播放器可以启动并播放用户选择的mp3.但有一个问题.如果用户按下暂停按钮,则媒体播放器应暂停并稍后在与其暂停相同的位置恢复该歌曲.如何将活动中的命令发送到应暂停歌曲的服务?
将mediaplayer实例放在Activity中更容易.这样我可以在那里放一个onclick监听器和一个按钮.对于由服务运行的媒体播放器,它在活动外部并且不能在屏幕上放置按钮以便他们推动暂停.
在进行更复杂的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) android ×10
onclick ×2
service ×2
sqlite ×2
audio ×1
connectivity ×1
cursor ×1
database ×1
media-player ×1
networking ×1
oncreate ×1
position ×1
sockets ×1
sql ×1
touch ×1