wifi robot的安卓端开发经验教训

这一段应学妹要求,做了一个关于物联网的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中有体现。


本人属于菜鸟级别,有什么说错的地方,敬请指导。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章