解决方案 »

  1.   

    startActivityForResult是个不错的解决方案。
      

  2.   


    我也考虑了这个方法,下面是例子代码。问题是如何返回结果呢?onActivityResult貌似是Activity的一个方法,我在BluetoothAdapter.java文件里没法直接写吧?        buttonOpenActivity.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    //                Intent intent = new Intent();
    //                //intent.setClassName("com.android.xiong.gridlayoutTest", "com.android.xiong.gridlayoutTest.MainActivity");
    //                intent.setClassName("org.peking.AppOpsTest", "org.peking.AppOpsTest.PasswordActivity");
    //                //startActivity(intent);
    //
    //                Bundle bundle = new Bundle();
    //                bundle.putBoolean("enforced", false);
    //                intent.putExtras(bundle);
    //                intent.setClass(SwitchActivity.this, PasswordActivity.class);
    //                startActivityForResult(intent, 10);                Intent intent = new Intent(Intent.ACTION_MAIN);
                    intent.addCategory(Intent.CATEGORY_LAUNCHER);
                    ComponentName componentName = new ComponentName("org.peking.AppOpsTest", "org.peking.AppOpsTest.PasswordActivity");
                    intent.setComponent(componentName);
                    //startActivity(intent);                Bundle bundle = new Bundle();
                    bundle.putBoolean("enforced", false);
                    intent.putExtras(bundle);
                    intent.setClass(SwitchActivity.this, PasswordActivity.class);
                    startActivityForResult(intent, 10);
                }
            });
      

  3.   

    在你的框架类增加一个成员变量保存activity就可以,然后用这个activity变量去创建intent
      

  4.   


    广播的话,如何设置BroadcastReciver呢? BluetoothAdapter.java的代码应该没有界面的吧?也不是一个应用
      

  5.   


    1)不太懂,是要在写一个activity的类么?这个需要添加一个文件吧?怎么把这个文件添加到编译脚本中去呢?
    2)即使activity实现了,如何向BluetoothAdapter.java传回结果?
      

  6.   


    1)不太懂,是要在写一个activity的类么?这个需要添加一个文件吧?怎么把这个文件添加到编译脚本中去呢?
    2)即使activity实现了,如何向BluetoothAdapter.java传回结果?
    我理解错了。你这个需求似乎要定制系统才能实现。
      

  7.   

    你说的“在启动或者关闭蓝牙时”,指的是通过系统设置而不是你的app来启动关闭吧?
      

  8.   


    是的,包括所有可能的蓝牙操作(系统的,其它app,当然也包括自己app的),系统是定制的,所以可以改源码,现在我发现在框架层startActivity都调用不了。。貌似是Activity的类方法,可是在框架层去哪里找Activity呢?
      

  9.   


    是的,包括所有可能的蓝牙操作(系统的,其它app,当然也包括自己app的),系统是定制的,所以可以改源码,现在我发现在框架层startActivity都调用不了。。貌似是Activity的类方法,可是在框架层去哪里找Activity呢?
    既然可以定制,那你找到系统设置启动关闭蓝牙的那个原有的activity改它的源码不就可以了?
      

  10.   


    是的,包括所有可能的蓝牙操作(系统的,其它app,当然也包括自己app的),系统是定制的,所以可以改源码,现在我发现在框架层startActivity都调用不了。。貌似是Activity的类方法,可是在框架层去哪里找Activity呢?
    既然可以定制,那你找到系统设置启动关闭蓝牙的那个原有的activity改它的源码不就可以了?

    呃,别的app可以直接调用enable()。
    你这样的需求实际上会导致兼容性问题,因为别的app本来直接enable就可以了,但是在你的定制系统上不行了。
    如果抛开兼容性,那你完全可以把BluetoothAdapter.enable()函数改为BluetoothAdapter.enable(Activity activity)这样;disable也做类似处理。
      

  11.   


    是的,包括所有可能的蓝牙操作(系统的,其它app,当然也包括自己app的),系统是定制的,所以可以改源码,现在我发现在框架层startActivity都调用不了。。貌似是Activity的类方法,可是在框架层去哪里找Activity呢?
    既然可以定制,那你找到系统设置启动关闭蓝牙的那个原有的activity改它的源码不就可以了?

    呃,别的app可以直接调用enable()。
    你这样的需求实际上会导致兼容性问题,因为别的app本来直接enable就可以了,但是在你的定制系统上不行了。
    如果抛开兼容性,那你完全可以把BluetoothAdapter.enable()函数改为BluetoothAdapter.enable(Activity activity)这样;disable也做类似处理。
    或者,更纯粹一些,改成这样    public boolean enable(String password) {
         ...
        }
        public boolean disable(String password) {
         ...
        }
      

  12.   


    广播的话,如何设置BroadcastReciver呢? BluetoothAdapter.java的代码应该没有界面的吧?也不是一个应用BluetoothAdapter里只是显示蓝牙设备列表的吧,搜索蓝牙的界面那有上下文的
      

  13.   


    是的,包括所有可能的蓝牙操作(系统的,其它app,当然也包括自己app的),系统是定制的,所以可以改源码,现在我发现在框架层startActivity都调用不了。。貌似是Activity的类方法,可是在框架层去哪里找Activity呢?
    既然可以定制,那你找到系统设置启动关闭蓝牙的那个原有的activity改它的源码不就可以了?

    呃,别的app可以直接调用enable()。
    你这样的需求实际上会导致兼容性问题,因为别的app本来直接enable就可以了,但是在你的定制系统上不行了。
    如果抛开兼容性,那你完全可以把BluetoothAdapter.enable()函数改为BluetoothAdapter.enable(Activity activity)这样;disable也做类似处理。
    或者,更纯粹一些,改成这样    public boolean enable(String password) {
         ...
        }
        public boolean disable(String password) {
         ...
        }不管怎么样,应用那边貌似都需要改动,所以现在只打算改Settings里的蓝牙设置了,应用调用蓝牙我会直接限制permission。
    现在问题来了,我发现我的ubuntu里的android模拟器的Settings里没有蓝牙这一项?但是windows下的模拟器有,这个如何破?
      

  14.   


    是的,包括所有可能的蓝牙操作(系统的,其它app,当然也包括自己app的),系统是定制的,所以可以改源码,现在我发现在框架层startActivity都调用不了。。貌似是Activity的类方法,可是在框架层去哪里找Activity呢?
    既然可以定制,那你找到系统设置启动关闭蓝牙的那个原有的activity改它的源码不就可以了?

    呃,别的app可以直接调用enable()。
    你这样的需求实际上会导致兼容性问题,因为别的app本来直接enable就可以了,但是在你的定制系统上不行了。
    如果抛开兼容性,那你完全可以把BluetoothAdapter.enable()函数改为BluetoothAdapter.enable(Activity activity)这样;disable也做类似处理。
    或者,更纯粹一些,改成这样    public boolean enable(String password) {
         ...
        }
        public boolean disable(String password) {
         ...
        }不管怎么样,应用那边貌似都需要改动,所以现在只打算改Settings里的蓝牙设置了,应用调用蓝牙我会直接限制permission。
    现在问题来了,我发现我的ubuntu里的android模拟器的Settings里没有蓝牙这一项?但是windows下的模拟器有,这个如何破?
    和摄像头蓝牙这种硬件设备相关的功能不应该在模拟器里调试把,还是需要真机的。