如何在Android端判断是否是开发状态,即Eclipse打开链接Android模拟器或真机

蝈蝈俊 2012-03-13 04:20:28
Eclipse 开发时, 可能是在模拟器上运行,也可能是在真机上运行。
可能是调试状态,也可能是运行状态。


我想在我代码中如果发现是开发状态,有异常发生时,直接扔出,如果不是开发状态,则记录到一个文件。

Debug.isDebuggerConnected() 函数返回的是是否是调试状态。 开发时运行状态会认为不是调试状态。

android.os.Build.MODEL 能区分是真机还是模拟器, 但是不能区分是开发还是非开发状态。

我该用哪个来判断是开发还是非开发运行状态。


也就是是否有usb调试数据线连接到Android设备了。
...全文
465 9 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
old donkey 2014-08-31
可以在注册文件里面写明,debugable=false
  • 打赏
  • 举报
回复
csdn_2013 2013-04-28
引用 7 楼 ice_lut 的回复:
[quote=引用 6 楼 ConnectionUtils 的回复:] ...不管插拔 USB数据线 都会发送android.hardware.usb.action.USB_STATE广播的 如果你的应用 是预置到android 设备上的话 肯定是能接受到的
你好,我是开发模式,应用是我在Debug或者Run的时候安装的,这样是有问题啊[/quote] 如果不是事先预置安装的应用 确实会有问题 对于上叙提到的问题 暂时没有想到什么号的办法了~~ 先帮你顶贴 看其他人的想法是怎么个样子的
  • 打赏
  • 举报
回复
ice_lut 2013-04-28
引用 6 楼 ConnectionUtils 的回复:
...不管插拔 USB数据线 都会发送android.hardware.usb.action.USB_STATE广播的 如果你的应用 是预置到android 设备上的话 肯定是能接受到的
你好,我是开发模式,应用是我在Debug或者Run的时候安装的,这样是有问题啊
  • 打赏
  • 举报
回复
csdn_2013 2013-04-18
...不管插拔 USB数据线 都会发送android.hardware.usb.action.USB_STATE广播的 如果你的应用 是预置到android 设备上的话 肯定是能接受到的
  • 打赏
  • 举报
回复
csdn_2013 2013-04-12
引用 楼主 ghj1976 的回复:
Eclipse 开发时, 可能是在模拟器上运行,也可能是在真机上运行。 可能是调试状态,也可能是运行状态。 我想在我代码中如果发现是开发状态,有异常发生时,直接扔出,如果不是开发状态,则记录到一个文件。 Debug.isDebuggerConnected() 函数返回的是是否是调试状态。 开发时运行状态会认为不是调试状态。 android.os.Build.MODEL 能区……
当android设备连接到USB时,会发送android.hardware.usb.action.USB_STATE Lz 可以在AnroidManiFest.xml中声明如下 接受该广播 <receiver android:name=".UsbReceiver"> <intent-filter> <action android:name="android.hardware.usb.action.USB_STATE"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.MEDIA_MOUNTED"/> <data android:scheme="file"/> </intent-filter> </receiver> 在增加UsbReceiver.java文件 对接受到的广播做处理

public class UsbReceiver extends BroadcastReceiver {
    private static final String TAG = "UsbReceiver";
    private static final String ASK_ON_PLUG = "ask_on_plug";
    private static final String sInecm = SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE, "false");
    private StorageManager mStorageManager = null;
    private UsbManager mUsbManager;
    private static boolean mMeidaMountStatus;
    private SharedPreferences mSharedPre;
    private SharedPreferences.Editor mEeditor;
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        mStorageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
        mUsbManager = (UsbManager)context.getSystemService(Context.USB_SERVICE);
        mSharedPre = context.getSharedPreferences("com.android.settings_preferences", 0);
        mEeditor = mSharedPre.edit();
        if (UsbManager.ACTION_USB_STATE.equals(action) ){
            onUsbStateReceive(context, intent);
        } else if (Intent.ACTION_MEDIA_MOUNTED.equals(action)) {
            onMediaMountedReceive(context, intent);
        }
    }

    private void onMediaMountedReceive(Context context, Intent intent) {
        boolean usb_connected = mSharedPre.getBoolean("usbState", false);
        
        if(usb_connected && context.getResources().getBoolean(R.bool.usb_mass_storage_mode_enable)
            && UsbManager.USB_FUNCTION_MASS_STORAGE.equals(mUsbManager.getDefaultFunction())) {
            popUsbDialog(context);
        } else {
            return;//do nothing
        }
    }
    
    private void popUsbDialog(Context context) {
    	boolean usb_connected = mSharedPre.getBoolean("usbState", false);
    	String sdcardState = Environment.getSDCardStorageState();
        if (usb_connected
        		&& (sdcardState.equals(Environment.MEDIA_MOUNTED) || sdcardState.equals(Environment.MEDIA_MOUNTED_READ_ONLY))
                && UsbManager.USB_FUNCTION_MASS_STORAGE.equals(mUsbManager.getDefaultFunction())
                && !mStorageManager.isUsbMassStorageEnabled()
                && (Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.DEVICE_PROVISIONED, 0) == 1)
                && context.getResources().getBoolean(R.bool.usb_mass_storage_mode_enable) ) {
            Intent i = new Intent();
            i.setClassName(context, "com.android.settings.MassStorageDialogActivity");
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
    }
    
    private void onUsbStateReceive(Context context, Intent intent) {
        boolean usb_connected = intent.getBooleanExtra(UsbManager.USB_CONFIGURED, false);
        final ContentResolver cr = context.getContentResolver();
        mEeditor.putBoolean("usbState", usb_connected);
        mEeditor.commit();

        boolean changed = false;
        boolean preState = mSharedPre.getBoolean("preState", false);
        String progress = SystemProperties.get("vold.encrypt_progress");
        if ((progress != null) && !progress.isEmpty())  {
            return;
        }
        if (usb_connected != preState) {
            changed = true;
        }
        KeyguardManager kgm =
            (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
        if (sInecm.equals("false")
                && usb_connected && changed && !preState
                && (1 == Settings.System.getInt(cr, UsbReceiver.ASK_ON_PLUG, 1))
                && !kgm.inKeyguardRestrictedInputMode()) {
            mEeditor.putBoolean("preState", true);
            mEeditor.commit();
            //注意这里,我这里处理的方式是当USB连接上了android设备,我就跳转到设置的UsbSettings界面,LZ可以参考我的代码自己来修改           
            context.startActivity(Intent.makeRestartActivityTask(
               new ComponentName("com.android.settings","com.android.settings.UsbSettings")));
        } else if (!usb_connected) {
            mEeditor.putBoolean("preState", false);
            mEeditor.commit();
        }
        String usbType = SystemProperties.get("persist.sys.usb.config", "");
        if (usbType != null) {
            UsbSettings.writeSuitestate(mUsbManager.getDefaultFunction());
        }
              
        if (UsbManager.USB_FUNCTION_MASS_STORAGE.equals(mUsbManager.getDefaultFunction())
            && context.getResources().getBoolean(R.bool.usb_mass_storage_mode_enable)) {
            if (usb_connected){
                popUsbDialog(context);
            } else {
            	if (mStorageManager.isUsbMassStorageEnabled()) {
            		mStorageManager.disableUsbMassStorage();
            	}
            }
        }
    }
}

  • 打赏
  • 举报
回复
ice_lut 2013-04-12
我也遇到了同样的问题,不知道楼主解决没,有没有什么办法?
  • 打赏
  • 举报
回复
ice_lut 2013-04-12
引用 2 楼 ConnectionUtils 的回复:
引用 楼主 ghj1976 的回复:Eclipse 开发时, 可能是在模拟器上运行,也可能是在真机上运行。 可能是调试状态,也可能是运行状态。 我想在我代码中如果发现是开发状态,有异常发生时,直接扔出,如果不是开发状态,则记录到一个文件。 Debug.isDebuggerConnected() 函数返回的是是否是调试状态。 开发时运行状态会认为不是调试状……
这个挺好,但是会有个问题,如果我一开始就是链接USB(默认开发模式运行),无法接受到广播的 ?
  • 打赏
  • 举报
回复
ice_lut 2013-04-12
引用 2 楼 ConnectionUtils 的回复:
引用 楼主 ghj1976 的回复:Eclipse 开发时, 可能是在模拟器上运行,也可能是在真机上运行。 可能是调试状态,也可能是运行状态。 我想在我代码中如果发现是开发状态,有异常发生时,直接扔出,如果不是开发状态,则记录到一个文件。 Debug.isDebuggerConnected() 函数返回的是是否是调试状态。 开发时运行状态会认为不是调试状……
这个挺好,但是会有个问题,如果我一开始就是链接USB(默认开发模式运行),无法接受到广播的 ?
  • 打赏
  • 举报
回复
Jobernowl 2013-04-12
if(BuildConfig.DEBUG)
难道是说这句?
  • 打赏
  • 举报
回复
相关推荐
发帖
Android

7.9w+

社区成员

移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
帖子事件
创建了帖子
2012-03-13 04:20
社区公告
暂无公告