这一段应学妹要求,做了一个关于物联网的wifi robot的安卓端应用,其中很多的代码段都是参考网上的,没有什么原创性可言,这里我就发一些自己遇到的问题,给大家一点借鉴。
应用功能是 首先一个欢迎界面,几秒钟后跳转到状态显示页面,显示下位机传来的温度,PH等数值,左右滑动进入视频显示界面,并有舵机的控制按键。
其中wifi的刷机教程网上有很多,这里不赘述。
遇见的第一个问题:界面跳转时自动弹出->原因:没有在AndroidMainfest.xml中添加自定义的Activitiy,红色为自定义的部分。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.lessonone"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.lessonone.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<span style="color:#ff0000;"><activity
android:name=".statusActivity"
>
</activity>
<activity
android:name=".controlActivity"
>
</activity></span>
</application>
</manifest>
第二个问题:反编译的解读问题:
因为参考了一个APP,遇到了一些反编译的问题。
1.像类似这种语句,其内部的参数可以在R中查找。
super.onCreate(paramBundle);
setContentView(2130903042);
2.这里有无用的局部变量
TextView localTextView1 = (TextView)findViewById(2131099659);
this.tempTextView = localTextView1;
可以改写为
tempTextView=(TextView)findViewById(2131099659);
其中tempTextView为自定义的本地变量,数字是ID号。
3.内部方法
package dennis.android;
import android.view.View;
import android.view.View.OnClickListener;
import dalvik.annotation.EnclosingMethod;
@EnclosingMethod
class ControlActivity$7
implements View.OnClickListener
{
public void onClick(View paramView)
{
SocketThread localSocketThread = this.this$0.socketThread;
byte[] arrayOfByte = ControlActivity.access$6(this.this$0);
localSocketThread.send(arrayOfByte);
}
}
经常有人问到EnclosingMethod 的问题,网上的解答也不多。这里会在左边的项目栏中出现一个新的Activity,其实是一个内部的方法调用。
这里的access指的是其他类的外部方法。实际的代码差不多如下:
rightButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
byte[] ArrayofByte = CMD_RIGHT;
// TODO Auto-generated method stub
socketThread.send(ArrayofByte);
}
});
第三个问题:其实这个就显得我有些弱智了。记得在自定义的surfaceView类里添加while(ture)保证画面能刷新。。。,其中丑陋的变量部分请忽略。
<span style="color:#ff6666;">while(true)</span>
{
try {
videoUrl=new URL(url);
conn=(HttpURLConnection)videoUrl.openConnection();
conn.setDoInput(true);
conn.connect();
inputStream=conn.getInputStream();
bmpBitmap=BitmapFactory.decodeStream(inputStream);
Bitmap localBitmap=bmpBitmap;
int i=ScreenW;
int j=ScreenH;
Bitmap dstmBitmap=Bitmap.createScaledBitmap(localBitmap, i, j,true);
bmpBitmap=dstmBitmap;
canvas=new Canvas(bmpBitmap);
canvas=surfaceHolder.lockCanvas();
canvas.drawBitmap(bmpBitmap, 0,0,null);
surfaceHolder.unlockCanvasAndPost(canvas);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
第四个问题:使用自定义的surfaceview不显示,会黑屏。记得在红色部分换上自定义的类代替原来的控件。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<<span style="color:#ff0000;">com.example.lessonone.MySurfaceView</span>
android:id="@+id/surfaceView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_marginBottom="35dp"
android:layout_marginLeft="53dp"
android:text="Button" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/button1"
android:layout_alignBottom="@+id/button1"
android:layout_alignParentRight="true"
android:layout_marginRight="38dp"
android:text="Button" />
</RelativeLayout>
最后一个问题:额,不用忘了入网许可,在第一个XML中有体现。
本人属于菜鸟级别,有什么说错的地方,敬请指导。