正在上传图片(0/1)

求助.编写了一个简单安卓app控制飞行器,但是无法启动.

 0
手机看帖 16 6595
学校的项目,已经有sdk level2的权限.开发环境为andriod studio.

前期目标很简单,开发一个安卓app,可以控制phantom2 的启动电机,和关闭电机.

研究了一下demoapp,写了以下的一个activity,三个按钮,启动groundstation,启动groundstationtask(启动电机),关闭groundstation. 我不确定可不可以直接用maincontroller中的takeoff命令呢?
但是现在app无法启动.

麻烦哪位帮助下.

代码:

public class MainActivity extends ActionBarActivity implements View.OnClickListener {
    private Button startGS;
    private Button takeOff;
    private Button closeGS;
    private static final String TAG = "MainActivity";
    private final int SHOWTOAST = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        System.out.println("onCreate");

        startGS = (Button)findViewById(R.id.btnOpenGS);
        takeOff = (Button)findViewById(R.id.btnTakeOff);
        closeGS = (Button)findViewById(R.id.btnCloseGS);

        startGS.setOnClickListener(this);
        takeOff.setOnClickListener(this);
        closeGS.setOnClickListener(this);

        //initial
        onInitSDK();

        //check permission
        new Thread(){
            public void run() {
                try {
                    DJIDrone.checkPermission(getApplicationContext(), new DJIGerneralListener() {

                        @Override
                        public void onGetPermissionResult(int result) {
                            // TODO Auto-generated method stub
                            Log.e(TAG, "onGetPermissionResult = " + result);
                            Log.e(TAG, "onGetPermissionResultDescription = " + DJIError.getCheckPermissionErrorDescription(result));
                        }
                    });
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }.start();



    }
    protected void onDestroy(){
        super.onDestroy();
        System.out.println("onDestroy");
        // uninitial
        onUnInitSDK();
    }

    private void onInitSDK(){
        DJIDrone.initWithType(this.getApplicationContext(), DJIDroneType.DJIDrone_Vision);
        DJIDrone.connectToDrone();
    }
    private void onUnInitSDK(){
        DJIDrone.disconnectToDrone();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btnOpenGS:

                DJIDrone.getDjiMainController().startTakeoff(new DJIExecuteResultCallback() {
                    @Override
                    public void onResult(DJIError djiError) {

                    }
                });

//                DJIDrone.getDjiCamera().startTakePhoto(new DJIExecuteResultCallback(){
//                    @Override
//                    public void onResult(DJIError mErr) {
//                        Log.d(TAG,"start take photo errorcode:"+mErr.errorCode);
//
//                    }
//                });
//                DJIDrone.getDjiGroundStation().openGroundStation(new DJIGroundStationExecuteCallBack(){
//
//                    @Override
//                    public void onResult(DJIGroundStationTypeDef.GroundStationResult result) {
//                        // TODO Auto-generated method stub
//                        String ResultsString = "return code =" + result.value();
//                        handler.sendMessage(handler.obtainMessage(SHOWTOAST, ResultsString));
//                    }
//
//                });
//                break;
            case R.id.btnTakeOff:
                DJIDrone.getDjiGroundStation().startGroundStationTask(new DJIGroundStationTakeOffCallBack(){

                    @Override
                    public void onResult(DJIGroundStationTypeDef.GroundStationTakeOffResult result) {
                        // TODO Auto-generated method stub
                        String ResultsString = "return code =" + result.value();
                        handler.sendMessage(handler.obtainMessage(SHOWTOAST, ResultsString));
                    }
                });
                break;
            case R.id.btnCloseGS:
                DJIDrone.getDjiGroundStation().closeGroundStation(new DJIGroundStationExecuteCallBack(){

                    @Override
                    public void onResult(DJIGroundStationTypeDef.GroundStationResult result) {
                        // TODO Auto-generated method stub
                        String ResultsString = "return code =" + result.value();
                        handler.sendMessage(handler.obtainMessage(SHOWTOAST, ResultsString));
                    }

                });
                break;

        }
    }
    private Handler handler = new Handler(new Handler.Callback() {

        @Override
        public boolean handleMessage(Message msg) {
            switch (msg.what) {
                case SHOWTOAST:
                    setResultToToast((String)msg.obj);
                    break;

                default:
                    break;
            }
            return false;
        }
    });
    private void setResultToToast(String result){
        Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

评论
上传
你需要登录之后才能回帖    登录 | 注册
Indulge   2015-6-14 3#
你厉害、、、
楼主   2015-6-14 4#
dji SDK 开发的教材比较少

只能自己一点点尝试了.
isky  Phantom 4认证用户 2015-6-14 5#
android 开发的问题吧,好像和sdk 还没关系
楼主   2015-6-14 6#
isky 发表于 2015-6-14 21:11
android 开发的问题吧,好像和sdk 还没关系
有可能的,android开发我也是新手...

没有报错,但是就是app无法执行.
love123zst.163   2015-6-15 7#
研究下demo,先把demo 运行起来!
在demo的逻辑关键点设置断点、打印日志,搞清楚其逻辑 再自己动手写,我就是这么搞的……
lanyusea  Inspire 1认证用户 2015-6-15 8#
贴一下你的 AndroidManifest.xml
SDK板块日常维护志愿者。
我没有QQ,我也不接受私信提问。有问题请去论坛发帖,利人利己。

我没有QQ,我没有QQ,我没有QQ。
重要的事情说三遍。
楼主   2015-6-15 9#
lanyusea 发表于 2015-6-15 13:40
贴一下你的 AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="eis.pp.hpc.ude.com.myapplication" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="22" />

    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <meta-data
            android:name="com.dji.sdk.API_KEY"
            android:value="1bc1824788cf0887db" />

        <activity
            android:name=".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>
    </application>

</manifest>
楼主   2015-6-15 10#
love123zst.163 发表于 2015-6-15 10:29
研究下demo,先把demo 运行起来!
在demo的逻辑关键点设置断点、打印日志,搞清楚其逻辑 再自己动手写,我 ...
感谢.  我也研究demo挺久的...
自己的app就是按着demo写的.

不过的确,我还得再看看,demo里内容有点多,关系复杂
楼主   2015-6-15 11#
请教一下,DEMO app里 这段callback代码是什么意义呢?

      
        DJIDrone.getDjiCamera().setReceivedVideoDataCallBack(mReceivedVideoDataCallBack);
        
        mMcuUpdateStateCallBack = new DJIMcuUpdateStateCallBack(){

            @Override
            public void onResult(DJIMainControllerSystemState state) {
                // TODO Auto-generated method stub
                homeLocationLatitude = state.droneLocationLatitude;
                homeLocationLongitude = state.droneLocationLongitude;
               
                if(homeLocationLatitude != -1 && homeLocationLongitude != -1 && homeLocationLatitude != 0 && homeLocationLongitude != 0){
                    getHomePiontFlag = true;
                }
                else{
                    getHomePiontFlag = false;
                }
            }
           
        };   
lanyusea  Inspire 1认证用户 2015-6-15 12#
看着没有问题…
你在run module的设置里面手动选上MainActivity看看能不能打开?
SDK板块日常维护志愿者。
我没有QQ,我也不接受私信提问。有问题请去论坛发帖,利人利己。

我没有QQ,我没有QQ,我没有QQ。
重要的事情说三遍。
楼主   2015-6-15 13#
lanyusea 发表于 2015-6-15 17:50
看着没有问题…
你在run module的设置里面手动选上MainActivity看看能不能打开?
...
非常非常感谢.

我在英文的dev论坛发现了一个解决方法,加入了一些文件,app可以跑起来了!
不过现在我想先搞清楚一个概念问题.
请问我们是不是只能通过groundstation的指令控制飞行器.
顺序为:app连接drone---->启动groundstation----->add waypoit---->take off----->运动到指定点------>Go Home 回到home点

还是可以通过maincontroller里的命令,例如 starttakeoff stoptakeoff?
楼主   2015-6-16 14#
最新进展,app运行成功了....

运行环境是android studio的缘故,在配置的时候还要复制几个文件到项目的lib里....

感谢大家的关注
xyz2782350.163   2015-7-3 15#
totoo1111 发表于 2015-6-16 06:55
最新进展,app运行成功了....

运行环境是android studio的缘故,在配置的时候还要复制几个文件到项目的lib里 ...
你好,请问你们是不是没有利用ground station ,在mainactivity里面直接控制飞机飞起来了?
lianghao4688   2015-8-17 16#
totoo1111 发表于 2015-6-16 06:55
最新进展,app运行成功了....

运行环境是android studio的缘故,在配置的时候还要复制几个文件到项目的lib里 ...
楼主能否分享下,我也遇到相同的问题。
收藏 点赞 评论
分享至:
回复:
上传
取消 评论
快速回复 返回顶部 返回列表