getparcelableextra用法

合集下载

安卓蓝牙中文翻译帮助文档

安卓蓝牙中文翻译帮助文档
查询已配对设备 在执行设备发现之前,先查询下已经配对的设备,来看下我们想要的设备是不是已经是知 道的还是值得的。 Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices(); // If there are paired devices if (pairedDevices.size() > 0) {
尔类型,它表明发现过程启动是否成功。这个发现过程通常包含了 12S 的扫描查询过程,接 下来就是包含了每个被发现设备的的页扫描来提取蓝牙设备的名字。
// Create a BroadcastReceiver for ACTION_FOUND private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
如果你将要初始化一个连接到远程设备,你就没有必要打开可见性。使能可见性仅仅只是让 你的应用程序作为服务端 Socket,它用来接受输入连接请求。因为远程设备在初始化连接之 前必须先发现这个设备。
连接设备 为了在你的应用程序里面让 2 个设备建立连接,你必须实行服务端和客户端连接机制。因为 一个设备必须打开一个 server socket 服务端套接字而另一个设备必须初始化这个连接(使 用 server 设备的物理地址来建立连接)。当 server 和 client 他们之间在同一个 RFCOMM 通 信通道之间有一个连接好了的 BluetoothSocket 的时候,server 和 client 服务端和客户端就被 认为是已经建立好了连接。在这个点上,每个设备就可以获得输入输出流,数据传输也可以 开始。关于这点我们在管理连接那节介绍,我们这节只讲如何在 2 个设备之间初始化连接。

intent.getbooleanextra的用法 -回复

intent.getbooleanextra的用法 -回复

intent.getbooleanextra的用法-回复intent.getBooleanExtra是Android中的一个方法,用于从Intent中获取布尔类型的额外数据。

Intent用于在不同组件之间传递数据,而额外数据可以添加到Intent对象中,以便在多个组件之间共享。

intent.getBooleanExtra方法允许我们从传递的Intent中提取一个布尔类型的额外数据,并返回一个布尔型的值。

在这篇文章中,我们将详细介绍intent.getBooleanExtra方法的使用方法,并提供一些示例,以便更好地理解这个方法的作用和用法。

一、intent.getBooleanExtra 方法的语法和参数解释intent.getBooleanExtra方法的语法如下:public boolean getBooleanExtra(String name, boolean defaultValue)该方法接受两个参数:- name:要提取的额外数据的名称。

- defaultValue:如果在Intent中没有找到指定名称的额外数据,则返回的默认布尔值。

该方法将返回一个布尔型的值,即被提取的额外数据的值。

如果在Intent中没有找到指定名称的额外数据,则返回指定的默认布尔值。

二、intent.getBooleanExtra 的使用示例为了更好地理解intent.getBooleanExtra方法的使用方法,我们将提供以下几个示例。

1. 从一个Activity向另一个Activity传递布尔类型的数据在发送数据的Activity中,首先创建一个Intent对象,并使用putExtra 方法添加一个布尔类型的额外数据:javaIntent intent = new Intent(SenderActivity.this, ReceiverActivity.class);intent.putExtra("isVerified", true);startActivity(intent);在接收数据的Activity中,使用getBooleanExtra方法从Intent中提取该布尔型的额外数据:javaIntent intent = getIntent();boolean isVerified = intent.getBooleanExtra("isVerified", false);上述代码中,如果在Intent中找不到名为"isVerified"的额外数据,则返回的默认值为false。

手机蓝牙检测蓝牙设备信号强度(RSSI)

手机蓝牙检测蓝牙设备信号强度(RSSI)

⼿机蓝⽛检测蓝⽛设备信号强度(RSSI)蓝⽛( Bluetooth® ):是⼀种⽆线技术标准,可实现固定设备、移动设备和楼宇个⼈域⽹之间的短距离数据交换(使⽤2.4—2.485GHz的ISM波段的UHF⽆线电波)。

蓝⽛技术最初由电信巨头爱⽴信公司于1994年创制,当时是作为RS232数据线的替代⽅案。

蓝⽛可连接多个设备,克服了数据同步的难题。

RSSI:Received Signal Strength Indication接收的信号强度指⽰,⽆线发送层的可选部分,⽤来判定链接质量,以及是否增⼤⼴播发送强度。

通过接收到的信号强弱测定信号点与接收点的距离,进⽽根据相应数据进⾏定位计算的⼀种定位技术。

本例是通过⼿机蓝⽛对周围蓝⽛设备进⾏搜索,显⽰出域⽤户输⼊的蓝⽛设备名称相匹配的远程蓝⽛设备的信号强度(RSSI)。

所需权限:<uses-permission android:name="android.permission.BLUETOOTH"/><uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/><uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED"/>布局⽂件activity_main.xml:<TextViewandroid:id="@+id/showRssi"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="hello_man"/><Buttonandroid:id="@+id/open"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/showRssi"android:layout_below="@+id/showRssi"android:layout_marginTop="24dp"android:onClick="open"android:text="打开蓝⽛"/><Buttonandroid:id="@+id/close"android:onClick="close"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/open"android:layout_alignBottom="@+id/open"android:layout_centerHorizontal="true"android:text="关闭蓝⽛"/><EditTextandroid:id="@+id/bluetoothName"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/open"android:layout_marginTop="31dp"android:ems="10"android:hint="请输⼊蓝⽛名称"><requestFocus /></EditText><Buttonandroid:id="@+id/show"android:onClick="show"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/close"android:layout_alignBottom="@+id/close"android:layout_alignParentRight="true"android:text="信号强度"/>布局图:布局为三个按钮,⼀个textview,⼀个editview。

getserializableextra 获取不到数据时的返回值

getserializableextra 获取不到数据时的返回值

getserializableextra 获取不到数据时的返回值问题:getSerializableExtra 获取不到数据时的返回值在Android开发中,我们经常会使用Intent来进行Activity之间的数据传递。

其中一个常见的方法是通过putExtra和getSerializableExtra来传递和获取Serializable类型的数据。

但是有时候我们会遇到一个问题,就是当我们调用getSerializableExtra时,如果没有找到对应的数据,它会返回什么值呢?事实上,当我们调用getSerializableExtra方法获取Serializable数据的时候,如果没有找到对应的数据,它会返回null。

这个null值表示没有找到对应的数据。

那么为什么会返回null呢?这是因为getSerializableExtra方法是通过键值对的方式来获取数据的,当我们调用putExtra方法将数据放入Intent 中时,会以键值对的形式存储起来。

然后当我们调用getSerializableExtra 方法时,它会根据传入的键来查找对应的值。

如果找不到对应的值,那么就会返回null。

那么当我们获取到null值时,应该如何处理呢?首先,我们需要明确一点,就是获取到null值并不一定意味着出错。

有时候,null值可能是预期的结果。

例如,在某些情况下,我们可能会根据某些条件来判断是否需要传递数据,如果不满足条件,就不会putExtra 数据到Intent 中。

在这种情况下,我们在获取数据时,如果返回null,那就表示没有满足条件需要传递的数据。

然而,在某些情况下,我们可能会期望获取到数据,但是得到了null值。

这可能是因为我们传递数据的时候出了问题。

下面是一些常见的原因和解决方法:1. 检查键是否正确首先,我们需要确保调用getSerializableExtra方法时传入的键值是正确的。

由于键值对是以字符串的形式存储的,因此大小写也是敏感的。

Android通过两种模式来支持各种USB外设和Android USB配件

Android通过两种模式来支持各种USB外设和Android USB配件

Android 通过两种模式来支持各种 USB 外设和 Android USB 配件(指那些符合 Android 附件协议的 硬件) :USB 配件和 USB 主机。

在 USB 配件的模式之下,外部的 USB 配件就像 USB 主机那样。

这 种配件可以包括机器人控制器,基站连接器,医疗和音乐设备,电话亭以及读卡器这样很多的设备。

这样就使得那些搭载 Android 系统的设备不需要具备主机的特性就可以和 USB 硬件进行交互。

Android USB 配件是指那些专门用来为搭载 Android 系统的设备工作以及符合 Android 附件通信协议 的设备。

在 USB 主机的模式之下, 搭载 Android 的设备就像主机那样工作。

这些设备包括数码相机, 键盘,鼠标以及游戏控制器。

Android USB 设备被设计成具有广泛的应用领域,可以很好的完成人机 互动应用的通信设备。

图 1 就显示了这两种模式的区别。

当搭载 Android 系统的设备处于主机的模式下,它就充当 USB 主机 并且为总线提供能源。

而当搭载 Android 系统的设备处于 USB 配件的模式下时,连接的 USB 硬件(这 种情况下,指的是一个 Android USB 配件)作为主机一样并且为总线提供能源。

在 Android3.1(API12 级)或较新的平台直接支持 USB 配件和主机模式。

USB 配件模式以一个附加 的类库的方式支持范围更广的设备 被移植到 Android 2.3.4(API10 级)。

设备生产商可以决定是否在 系统镜像上附加这个类库。

注意:支持 USB 主机和配件模式主要取决于设备的硬件,而不是平台的等级。

你可以通过一个 [[<uses-feature>]]元素来为设备进行过滤以支持 USB 主机和配件。

看这个 USB 配件和主机文档来 了解更多的详情。

调试注意事项当用 USB 主机或者配件调试应用程序时,你最好有连接到搭载 Android 程序的设备的 USB 硬件。

读取NfcA格式数据

读取NfcA格式数据

读取NfcA格式数据如何读取数据?Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);NfcA nfcA = NfcA.get(tag);nfcA.connect();byte[] SELECT = {(byte) 0x30, (byte) 0x05};//我读取的NFC卡⽚使⽤的是NTAG216的芯⽚,这⾥的指令参数是根据其datasheet的说明写的。

byte[] result = nfcA.transceive(SELECT);//这⾥会返回16个字节的数据,根据芯⽚不同会有差异该芯⽚的快速读写命令是0x3A,可以指定读取页数范围,在使⽤快速读写命令时,发现读取范围超过70字节android就会报错,所以使⽤了每次最多读取64字节的⽅式。

package com.yorkg.android.nfc;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.Arrays;import android.app.Activity;import android.app.AlertDialog;import android.app.PendingIntent;import android.content.DialogInterface;import android.content.Intent;import android.content.IntentFilter;import android.nfc.NfcAdapter;import android.nfc.Tag;import android.nfc.tech.MifareClassic;import android.nfc.tech.NfcA;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import com.yorkg.android.nfc.dataobject.mifare.MifareBlock;import com.yorkg.android.nfc.dataobject.mifare.MifareClassCard;import com.yorkg.android.nfc.dataobject.mifare.MifareSector;import com.yorkg.android.nfc.util.Converter;public class MyFirstNFCDemoActivity extends Activity {/** Called when the activity is first created. */private Button clearBtn = null;private EditText sealCompanyName = null;private EditText sealName = null;private EditText sealNumber = null;private EditText sealTaxId = null;private EditText sealCode = null;private EditText sealMaterial = null;private EditText sealSize = null;private EditText companyMadedName = null;private EditText companyMadedTime = null;private EditText companyCheckedName = null;private NfcAdapter mAdapter;private PendingIntent mPendingIntent;private IntentFilter[] mFilters;private String[][] mTechLists;private static final int AUTH = 1;private static final int EMPTY_BLOCK_0 = 2;private static final int EMPTY_BLOCK_1 = 3;private static final int NETWORK = 4;private static final int NFC_OFF = 5;private static final int NFC_TYPE_ERROR = 6;private static final String TAG = "NfcDemo";private static boolean READ_LOCK = false;private void initView(){sealCompanyName = (EditText) this.findViewById(R.id.edittext_seal_company_name);sealName = (EditText) this.findViewById(R.id.edittext_seal_name);sealNumber = (EditText) this.findViewById(R.id.edittext_seal_number);sealTaxId = (EditText) this.findViewById(R.id.edittext_tax_id);sealCode = (EditText) this.findViewById(R.id.edittext_code);sealMaterial = (EditText) this.findViewById(R.id.edittext_seal_material);sealSize = (EditText) this.findViewById(R.id.edittext_seal_size);companyMadedName = (EditText) this.findViewById(R.id.edittext_company_maded_name);companyMadedTime = (EditText) this.findViewById(R.id.edittext_company_maded_time);companyCheckedName = (EditText) this.findViewById(R.id.edittext_company_checked_name);clearBtn = (Button) this.findViewById(R.id.clear_btn);clearBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubcleanData();}});}//清除数据信息private void cleanData(){sealCompanyName.setText("");sealName.setText("");sealNumber.setText("");sealTaxId.setText("");sealCode.setText("");sealMaterial.setText("");sealSize.setText("");companyMadedName.setText("");companyMadedTime.setText("");companyCheckedName.setText("");}@Overridepublic void onCreate(Bundle savedState) {super.onCreate(savedState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(yout.main);initView();mAdapter = NfcAdapter.getDefaultAdapter(this);mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); // Setup an intent filter for all MIME based dispatchesIntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);// try {// ndef.addDataType("*/*");// } catch (MalformedMimeTypeException e) {// throw new RuntimeException("fail", e);// }mFilters = new IntentFilter[] { ndef, };mTechLists = new String[][] { new String[] { MifareClassic.class.getName() } , new String[] {NfcA.class.getName()}};//得到是否检测到ACTION_TECH_DISCOVERED触发if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(getIntent().getAction())) {//处理该intentresolveIntentNfcA(getIntent());}}@Overridepublic void onResume() {super.onResume();if (mAdapter!=null && (!mAdapter.isEnabled())) {showAlert(NFC_OFF, getString(R.string.error5));}if (mAdapter!=null) {mAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters,mTechLists);}}@Overridepublic void onNewIntent(Intent intent) {resolveIntentNfcA(intent);}@Overridepublic void onPause() {super.onPause();if (mAdapter!=null){mAdapter.disableForegroundDispatch(this);}}void resolveIntentNfcA(Intent intent){if (READ_LOCK==false){READ_LOCK = true;Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())){Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); MyLog.i(TAG, Arrays.toString(tagFromIntent.getTechList()));try{NfcA nfcA = NfcA.get(tag);nfcA.connect();byte[] SELECT = {(byte) 0x30,(byte) 0x05,};byte[] result = nfcA.transceive(SELECT);int data_len = ((result[0]&0x0f)<<8)+((result[1]&0xff));MyLog.i(TAG, "是否已写⼊数据"+result[0]+",写⼊数据长度:"+data_len); byte[] buf_res = new byte[data_len/2+4];if (result[0]!=0 && data_len!=0){int count = data_len/2/64;int i = 0;for (i=0; i<count; i++){// //读取数据byte[] DATA_READ = {(byte) 0x3A,(byte) (0x06+i*(64/4)),(byte) (0x06+(i+1)*(64/4))// (byte) (5+data_len/8)};byte[] data_res = nfcA.transceive(DATA_READ);System.arraycopy(data_res, 0, buf_res, i*64, 64);MyLog.i(TAG, "读卡成功");}if (((data_len/2)%(64))!=0){byte[]DATA_READ = {(byte) 0x3A,(byte) (0x06+i*(64/4)),(byte) (((0x06+i*(64/4))+(data_len/2/4)%(64/4))-1)// (byte) (5+data_len/8)};byte[] data_res = nfcA.transceive(DATA_READ);System.arraycopy(data_res, 0, buf_res, i*64, (data_len/2)%64);MyLog.i(TAG, "读卡成功2");}String res = gb2312ToString(buf_res);MyLog.i(TAG, "stringBytes:"+res);showNFCInfo(res);}}catch(IOException e){e.printStackTrace();cleanData();MyLog.e(TAG, "读卡失败");}catch (Exception e) {// TODO: handle exceptione.printStackTrace();showAlert(NFC_TYPE_ERROR, getString(R.string.error6));}finally{}}READ_LOCK = false;}}//将数据转换为GB2312private String gb2312ToString(byte[] data) {String str = null;try {str = new String(data, "gb2312");//"utf-8"} catch (UnsupportedEncodingException e) {}return str;}//将字符串解析显⽰到页⾯private void showNFCInfo(String str){String[] contents_temp = str.split("\\|");String[] contents = new String[contents_temp.length];int i;for (i = 0; i < contents_temp.length; i++) {contents[i]=contents_temp[i];}//⽬前有10项,所以这⾥只初始化到第10项for (int j=i; j<10; j++){contents[j]="";}if (contents[0]!=null){sealCompanyName.setText(contents[0]);}if (contents[1]!=null){sealName.setText(contents[1]);}if (contents[2]!=null){sealNumber.setText(contents[2]);}if (contents[3]!=null){sealTaxId.setText(contents[3]);}if (contents[4]!=null){sealCode.setText(contents[4]);}if (contents[5]!=null){sealMaterial.setText(contents[5]);}if (contents[6]!=null){sealSize.setText(contents[6]);}if (contents[7]!=null){companyMadedName.setText(contents[7]);}if (contents[8]!=null){companyMadedTime.setText(contents[8]);}if (contents[9]!=null){companyCheckedName.setText(contents[9]);}}private void showAlert(int alertCase,String str) {// prepare the alert boxAlertDialog.Builder alertbox = new AlertDialog.Builder(this); switch (alertCase) {case AUTH:// Card Authentication Erroralertbox.setMessage(getString(R.string.error1));break;case EMPTY_BLOCK_0: // Block 0 Emptyalertbox.setMessage(getString(R.string.error2));break;case EMPTY_BLOCK_1:// Block 1 Emptyalertbox.setMessage(getString(R.string.error3));break;case NETWORK: // Communication Erroralertbox.setMessage(getString(R.string.error4));break;case NFC_OFF:alertbox.setMessage(getString(R.string.error5));break;case NFC_TYPE_ERROR:alertbox.setMessage(getString(R.string.error6));}// set a positive/yes button and create a listeneralertbox.setPositiveButton("OK", new DialogInterface.OnClickListener() { // Save the data from the UI to the database - already donepublic void onClick(DialogInterface arg0, int arg1) {clearFields();}});// display boxalertbox.show();}private void clearFields() {}}。

Androidusb设备权限查询及自动获取详解流程

Androidusb设备权限查询及自动获取详解流程

Androidusb设备权限查询及⾃动获取详解流程看到当上⾯的对话框弹出时,可以使⽤命令查看顶层的活动窗⼝adb shell dumpsys window | findstr mCurrentFocusmCurrentFocus=Window{41ab0ee0 u0 com.android.systemui/bPermissionActivity}这就是应⽤的位置,当然我们也可以是⽤grep命令来查找这个对话框的.xml⽂件,进⼊android源码然后输⼊命令:grep '默认情况下⽤于' ./ -Rn./SystemUI/res/values-zh-rCN/strings.xml:51: <string name="always_use_device" msgid="1450287437017315906">"默认情况下⽤于该 USB 设备"</string>./SystemUI/res/values-zh-rCN/strings.xml:52: <string name="always_use_accessory" msgid="1210954576979621596">"默认情况下⽤于该 USB 配件"</string>那么这个对话框的路径在/android/frameworks/base/packages/SystemUI/res/values-zh-rCN/strings.xml其相关的内容如下:<string name="always_use_device" msgid="1450287437017315906">"默认情况下⽤于该 USB 设备"</string><string name="usb_device_permission_prompt" msgid="834698001271562057">"允许应⽤“<xliff:g id="APPLICATION">%1$s</xliff:g>”访问该 USB 设备吗?"相关应⽤路径找到.java⽂件来修改,其位置在:/android/frameworks/base/packages/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java这就是那个讨厌的对话框对应的java程序,那么来看看这个程序如下:/** Copyright (C) 2011 The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at** /licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/package b;import android.app.AlertDialog;import android.app.PendingIntent;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.content.pm.ApplicationInfo;import android.content.pm.PackageManager;import b.IUsbManager;import bAccessory;import bDevice;import bManager;import android.os.Bundle;import android.os.IBinder;import android.os.RemoteException;import android.os.ServiceManager;import erHandle;import android.util.Log;import youtInflater;import android.view.View;import android.widget.CheckBox;import poundButton;import android.widget.TextView;import com.android.internal.app.AlertActivity;import com.android.internal.app.AlertController;import com.android.systemui.R;public class UsbPermissionActivity extends AlertActivityimplements DialogInterface.OnClickListener, CheckBox.OnCheckedChangeListener {private static final String TAG = "UsbPermissionActivity";private CheckBox mAlwaysUse;private TextView mClearDefaultHint;private UsbDevice mDevice;private UsbAccessory mAccessory;private PendingIntent mPendingIntent;private String mPackageName;private int mUid;private boolean mPermissionGranted;private UsbDisconnectedReceiver mDisconnectedReceiver;@Overridepublic void onCreate(Bundle icicle) {super.onCreate(icicle);Intent intent = getIntent();mDevice = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);mAccessory = (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY); mPendingIntent = (PendingIntent)intent.getParcelableExtra(Intent.EXTRA_INTENT);mUid = intent.getIntExtra(Intent.EXTRA_UID, -1);mPackageName = intent.getStringExtra("package");Log.e(TAG, "mPackageName "+ mPackageName);Log.e(TAG, "mUid "+ mUid);PackageManager packageManager = getPackageManager();ApplicationInfo aInfo;try {aInfo = packageManager.getApplicationInfo(mPackageName, 0);} catch (NotFoundException e) {Log.e(TAG, "unable to look up package name", e);finish();return;}String appName = aInfo.loadLabel(packageManager).toString();Log.e(TAG, "appName "+ appName);final AlertController.AlertParams ap = mAlertParams;ap.mIcon = aInfo.loadIcon(packageManager);ap.mTitle = appName;if (mDevice == null) {ap.mMessage = getString(b_accessory_permission_prompt, appName);mDisconnectedReceiver = new UsbDisconnectedReceiver(this, mAccessory);} else {ap.mMessage = getString(b_device_permission_prompt, appName);mDisconnectedReceiver = new UsbDisconnectedReceiver(this, mDevice);}ap.mPositiveButtonText = getString(android.R.string.ok);ap.mNegativeButtonText = getString(android.R.string.cancel);ap.mPositiveButtonListener = this;ap.mNegativeButtonListener = this;// add "always use" checkboxLayoutInflater inflater = (LayoutInflater)getSystemService(YOUT_INFLATER_SERVICE);ap.mView = inflater.inflate(yout.always_use_checkbox, null);mAlwaysUse = (CheckBox)ap.mView.findViewById(com.android.internal.R.id.alwaysUse);if (mDevice == null) {mAlwaysUse.setText(R.string.always_use_accessory);} else {mAlwaysUse.setText(R.string.always_use_device);}mAlwaysUse.setOnCheckedChangeListener(this);mClearDefaultHint = (TextView)ap.mView.findViewById(com.android.internal.R.id.clearDefaultHint);mClearDefaultHint.setVisibility(View.GONE);if(!mPackageName.equals("bcamera"))setupAlert();else{mPermissionGranted = true;finish();}}@Overridepublic void onDestroy() {IBinder b = ServiceManager.getService(USB_SERVICE);IUsbManager service = IUsbManager.Stub.asInterface(b);// send response via pending intentIntent intent = new Intent();try {if (mDevice != null) {intent.putExtra(UsbManager.EXTRA_DEVICE, mDevice);if (mPermissionGranted) {service.grantDevicePermission(mDevice, mUid);if (mAlwaysUse.isChecked()) {final int userId = UserHandle.getUserId(mUid);service.setDevicePackage(mDevice, mPackageName, userId);}}}if (mAccessory != null) {intent.putExtra(UsbManager.EXTRA_ACCESSORY, mAccessory);if (mPermissionGranted) {service.grantAccessoryPermission(mAccessory, mUid);if (mAlwaysUse.isChecked()) {final int userId = UserHandle.getUserId(mUid);service.setAccessoryPackage(mAccessory, mPackageName, userId);}}}intent.putExtra(UsbManager.EXTRA_PERMISSION_GRANTED, mPermissionGranted); mPendingIntent.send(this, 0, intent);} catch (PendingIntent.CanceledException e) {Log.w(TAG, "PendingIntent was cancelled");} catch (RemoteException e) {Log.e(TAG, "IUsbService connection failed", e);}if (mDisconnectedReceiver != null) {unregisterReceiver(mDisconnectedReceiver);}super.onDestroy();}public void onClick(DialogInterface dialog, int which) {if (which == AlertDialog.BUTTON_POSITIVE) {mPermissionGranted = true;}finish();}public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if (mClearDefaultHint == null) return;if(isChecked) {mClearDefaultHint.setVisibility(View.VISIBLE);} else {mClearDefaultHint.setVisibility(View.GONE);}}}这段代码是获取应⽤的包名,我们可以通过包名对⽐来决定是否弹出对话框。

getserializableextra 警告 -回复

getserializableextra 警告 -回复

getserializableextra 警告-回复什么是getSerializableExtra警告?在Android开发中,我们经常需要在不同的Activity之间传递数据。

Intent 是一种常用的机制,用于在不同的组件之间传递数据。

通过putExtra方法,我们可以将数据附加到Intent上,然后在目标Activity中使用getExtra 方法来检索数据。

然而,当我们在Intent中传递自定义对象时,我们需要使用getSerializableExtra方法来获取该对象。

然而,有时候Android Studio会给出一个警告,提示我们进行一些更改。

这个警告就是"getSerializableExtra警告"。

为什么会出现getSerializableExtra警告?getSerializableExtra警告是Android Studio的一项功能,旨在帮助开发者改进代码质量和性能。

当我们使用getSerializableExtra方法获取自定义对象时,有时会发生序列化或反序列化问题,导致潜在的慢速性能或内存泄漏问题。

因此,Android Studio会给出这个警告,以提醒开发者进行必要的更改来避免这些问题。

如何解决getSerializableExtra警告?要解决getSerializableExtra警告,我们可以使用更安全和高效的方式传递自定义对象。

以下是一些步骤,可以帮助我们逐步解决这个警告。

第一步:了解警告内容首先,我们需要仔细阅读警告以了解其内容。

警告通常包括一些技术细节和建议,可以帮助我们确定问题的根源。

第二步:考虑使用Parcelable接口替代Serializable接口Android提供了两种主要的对象传递方式:Serializable和Parcelable。

虽然Serializable是更常见的选择,但Parcelable接口在性能方面更为优秀。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

getparcelableextra用法
getParcelableExtra方法是用于获取从Intent中传递的Parcelable 对象的方法。

Parcelable是一个Android特有的接口,用于在不同组件之间传递自定义对象。

使用getParcelableExtra方法的前提是,首先在发送Intent的地方将Parcelable对象添加到Intent中。

可以使用putExtra方法来添加Parcelable对象。

例如,在Activity A中,我们创建一个Parcelable对象并将其添加到Intent中:
```
ParcelableObj obj = new ParcelableObj(;
Intent intent = new Intent(this, ActivityB.class);
intent.putExtra("parcelable_obj", obj);
startActivity(intent);
```
然后,在Activity B中,我们可以使用getParcelableExtra方法来获取传递过来的Parcelable对象:
```
ParcelableObj obj =
getIntent(.getParcelableExtra("parcelable_obj");
getParcelableExtra方法接收一个字符串参数,该参数是之前在putExtra方法中添加Parcelable对象时所使用的键值。

通过这个键值,我们可以在接收方获取到正确的Parcelable对象。

需要注意的是,getParcelableExtra方法返回的是一个Parcelable 对象,需要进行类型转换才能使用其中的方法和属性。

另外,如果Intent中没有传递Parcelable对象,或者没有使用指定键值来传递Parcelable对象,那么getParcelableExtra方法将返回null。

在使用getParcelableExtra方法时,还需要保证传递的Parcelable 对象实现了Parcelable接口,并正确地实现了其中的方法。

下面是一个示例,展示如何自定义一个Parcelable对象及其使用方法。

首先,我们创建一个名为Student的类,实现Parcelable接口:
```java
public class Student implements Parcelable
private String name;
private int age;
public Student(String name, int age)
= name;
this.age = age;
protected Student(Parcel in)
name = in.readString(;
age = in.readInt(;
}
public static final Creator<Student> CREATOR = new Creator<Student
public Student createFromParcel(Parcel in)
return new Student(in);
}
public Student[] newArray(int size)
return new Student[size];
}
};
public String getNam
return name;
}
public int getAg
return age;
public int describeContent
return 0;
}
public void writeToParcel(Parcel dest, int flags)
dest.writeString(name);
dest.writeInt(age);
}
```
然后,在Activity A中,我们创建一个Student对象并将其添加到Intent中传递给Activity B:
```java
Student student = new Student("John Doe", 20);
Intent intent = new Intent(this, ActivityB.class);
intent.putExtra("student", student);
startActivity(intent);
```
最后,在Activity B中,我们使用getParcelableExtra方法获取传递过来的Student对象,并输出其属性:
```java
Student student = getIntent(.getParcelableExtra("student");
if (student != null)
Log.d("Student Name:", student.getName();
Log.d("Student Age:", String.valueOf(student.getAge());
```
getParcelableExtra方法是非常实用和方便的,可以轻松地在不同组件之间传递自定义对象。

通过正确实现Parcelable接口和使用getParcelableExtra方法,我们可以在Android应用中高效地传递复杂的对象数据。

相关文档
最新文档