当前位置:首页 » 安卓系统 » androidreverse

androidreverse

发布时间: 2023-05-29 19:54:57

⑴ Android获取NFC标签和NFC十进制16进制ID

<uses-feature

    android:name="android.hardware.nfc"

    android:required="true"/>

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

```

class NfcActivity :BaseActivity() {

private lateinit var imgBack:ImageView

    private lateinit var mNfcAdapter:NfcAdapter

    private lateinit var mPendingIntent:PendingIntent

    //nfc标签信息

    private lateinit var tvNfcTag:TextView

    //nfc十进制ID

 前行   private lateinit var tvNfcD:TextView

    //nfc16进制ID

    private lateinit var tvNfcH:TextView

    /**

    * 启动Activity

*/

    override fun onStart() {

super.onStart()

mNfcAdapter =NfcAdapter.getDefaultAdapter(this)

//一旦截获NFC消息,就会通过PendingIntent调用窗口

        mPendingIntent =PendingIntent.getActivity(this,0,Intent(this,javaClass),0)

}

override fun getLayoutId():Int {

return R.layout.activity_nfc

    }

override fun eventBus(event:Any?) {

}

override fun onCreate(savedInstanceState:Bundle?) {

super.onCreate(savedInstanceState)

imgBack =findViewById(R.id.img_nfc_back)

tvNfcD =findViewById(R.id.tv_nfc_d)

tvNfcH =findViewById(R.id.tv_nfc_h)

tvNfcTag =findViewById(R.id.tv_nfc_tag)

imgBack.setOnClickListener {finish() }

}

override fun onResume() {

super.onResume()

//设置处理春陆优于所有其他NFC的处理

        mNfcAdapter.enableForegroundDispatch(

this,

mPendingIntent,

null,

null

   慧森哗     )

}

override fun onPause() {

super.onPause()

//恢复默认状态

        mNfcAdapter.disableForegroundDispatch(this)

}

override fun onNewIntent(intent:Intent?) {

super.onNewIntent(intent)

//        readFromTag(intent);

        readNfcTag(intent!!)

}

/**

    * 读取NFC标签文本数据

    */

    private fun readNfcTag(intent:Intent) {

val tag:Tag? =intent.getParcelableExtra(NfcAdapter.EXTRA_TAG)

if (tag !=null) {

val cardNo =flipHexStr(ByteArrayToHexString(tag.id)).toLong(16)

tvNfcD.text = cardNo.toString()

tvNfcH.text =ByteArrayToHexString(tag.id)

}

if (NfcAdapter.ACTION_NDEF_DISCOVERED ==intent.action) {

val rawMessages =intent.getParcelableArrayExtra(

NfcAdapter.EXTRA_NDEF_MESSAGES

            )

var msgs:Array? =null

            var contentSize =0

            if (rawMessages !=null) {

msgs =arrayOfNulls(rawMessages.size)

for (iin rawMessages.indices) {

msgs[i] = rawMessages[i]as NdefMessage

                    contentSize +=msgs[i]!!.toByteArray().size

                }

}

try {

if (null !=msgs) {

val record =msgs[0]!!.records[0]

val textRecord:String? =

NfcUtil.parseTextRecord(record)

Log.e("nfcTag-->","" + textRecord)

tvNfcTag.text = textRecord

}

}catch (e:Exception) {

e.printStackTrace()

Log.e("nfcError-->","" + e)

}

}

}

}

```

获取标签及其ID的工具类

import android.nfc.NdefRecord;

import java.nio.charset.StandardCharsets;

import java.util.Arrays;

public class NfcUtil {

/**

    * 解析NDEF文本数据,从第三个字节开始,后面的文本数据

    * @param ndefRecord

    * @return

    */

    public static String parseTextRecord(NdefRecord ndefRecord) {

/**

        * 判断数据是否为NDEF格式

        * 判断TNF

*/

        if (ndefRecord.getTnf() !=NdefRecord.TNF_WELL_KNOWN) {

return null;

}

//判断可变的长度的类型

        if (!Arrays.equals(ndefRecord.getType(),NdefRecord.RTD_TEXT)) {

return null;

}

try {

//获得字节数组,然后进行分析

            byte[] payload =ndefRecord.getPayload();

//下面开始NDEF文本数据第一个字节,状态字节

            //判断文本是基于UTF-8还是UTF-16的,取第一个字节"位与"上16进制的80,16进制的80也就是最高位是1,

            //其他位都是0,所以进行"位与"运算后就会保留最高位

            String textEncoding = ((payload[0] &0x80) ==0) ?"UTF-8" :"UTF-16";

//3f最高两位是0,第六位是1,所以进行"位与"运算后获得第六位

            int languageCodeLength = payload[0] &0x3f;

//下面开始NDEF文本数据第二个字节,语言编码

            //获得语言编码

            String languageCode =new String(payload,1, languageCodeLength,StandardCharsets.US_ASCII);

//下面开始NDEF文本数据后面的字节,解析出文本

            String textRecord =new String(payload, languageCodeLength +1,

payload.length - languageCodeLength -1, textEncoding);

return textRecord;

}catch (Exception e) {

throw new IllegalArgumentException();

}

}

// 16转10进制

    public static String flipHexStr(String s) {

StringBuilder result =new StringBuilder();

for (int i =0; i <=s.length() -2; i = i +2) {

result.append(new StringBuilder(s.substring(i, i +2)).reverse());

}

return result.reverse().toString();

}

public static String ByteArrayToHexString(byte[]inarray) {

int i, j, in;

String[] hex = {"0","1","2","3","4","5","6","7","8","9","A",

"B","C","D","E","F"};

StringBuilder out =new StringBuilder();

for (j =0; j

in = (int)inarray[j] &0xff;

i = (in >>4) &0x0f;

out.append(hex[i]);

i = in &0x0f;

out.append(hex[i]);

}

return out.toString();

}

}

⑵ 如何使用Android的VectorDrawable类绘制矢量图

1. 创建Vector Drawable
从相似角度来看,VectorDrawable与标准SVG图形都是利用path值绘制完成的。不过如何利用SVG path绘制图形并不在本篇文章的探讨范围之内,大家可以点击此处从W3C网站处获取必要的说明资料。在本文当中,我们只需要了解到path标签的作用是进行图形绘制即可。让我们首先从SVG文件入手,看看以下图形是如乱陪闭何被绘制出来的:
这一图形共由五个主要部分所组成:
一个圆角四边形作为CPU主体,该四边形由两条拱状弧线构成。
四组各自包含五根线条的图形,用于充当CPU的外延线路。

虽然看起来有点繁杂,但大家其实用不着纠结于以上代码的具体含义,而且这完全不会影响到我们接下来要进行的VectorDrawable绘制工作。不过需要强调的是,我将前面提到的五大图形组成部分在代码中作为独立的区块来处理,这是为了增强代码内容的可读性。
首先,我们需要利用两条拱形弧线来绘制出圆角四边形,而在接下来的内容中我们会探讨如何分别表现出上、下、左、右四个方位的外延线条。为了将上述SVG代码转化为VectorDrawable,大家首先需要在XML当中定义vector对象。以下代码提取自本篇文章示例代码当中的vector_drawable_cpu.xml文件。
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="64dp" android:width="64dp" android:viewportHeight="600" android:viewportWidth="600" > </vector>
在此之后,大家可以向其中添加path数据。下列代码同样被拆分成了五个不同的path标签而非将其作为整体处理,这当然也是为了保证内容的可读性。

正如大家所见,每个path片段都只需要利用pathData属性进行绘制。现在我们可以将VectorDrawable XML文件作为一个可绘制对象纳入到标准ImageView当中,而且其能够根据应用程序的实际需要任意进行尺寸缩放——完全不需要再修改任何Java代码。
2. 为Vector Drawables添加动画效果
现在我们已经了解了如何以纯代码方式创建图形,接下来要做的是找点乐子——为其添加动画效果。在以下动画中,大家会发现作为延伸线路的各组线条会不断指向并远离CPU本体进行移动。
为了达到这一目标,大家需要将包含动画效果的每个片段包含在一个<group>哗裂标签当中。
接下来,我们需要为每个动画类型创建animator文件。在本次示例中,每组线路各使用一个animator,这就意味着共需要四个animator。以下代码所示为乱握上方线路的动画效果,大家还需要为下、左、右线路设定类似的效果。每个animator XML文件都被包含在了本项目的示例代码当中。

如大家所见,propertyName被设定为translateY,这意味着该动画将沿Y轴方向移动。而valueFrom与valueTo则控制着位移的起点与终点。通过将repeatMode设置为reverse而repeatCount设置为infinite,整个动画会一直循环下去,其效果则在VectorDrawable处体现出来。该动画的ration被设定为250,其时长单位为毫秒。
为了将该动画应用到自己的可绘制文件当中,大家需要创建一个新的animated-vector XML文件,从而将这些animator分配给各VectorDrawable组。以下代码的作用是创建该animated_cpu.xml文件。
<?xml version="1.0" encoding="utf-8"?> <animated-vector xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/vector_drawable_cpu"> <target android:animation="@animator/pulse_top" android:name="top" /> <target android:animation="@animator/pulse_right" android:name="right" /> <target android:animation="@animator/pulse_left" android:name="left" /> <target android:animation="@animator/pulse_bottom" android:name="bottom" /> </animated-vector>

当所有必要的XML文件都已经准备完成后,大家就可以将animated_cpu.xml加入到ImageView当中进行显示了。
<ImageView android:id="@+id/cpu" android:layout_width="64dp" android:layout_height="64dp" android:src="@drawable/animated_cpu" />

要开始播放动画效果,大家需要从ImageView当中获取Animatable实例并调用start。
ImageView mCpuImageView = (ImageView) findViewById( R.id.cpu ); Drawable drawable = mCpuImageView.getDrawable(); if (drawable instanceof Animatable) { ((Animatable) drawable).start(); }

在start被调用之后,CPU图形当中的线路图形就会开始移动——整个过程只需要使用少量Java代码即可实现。
3. Vector Drawables的变化方式
对于VectorDrawable来说,最常见的一种使用方式就是将一个图形转化至另一个图形,例如操作栏中的图标由汉堡变成箭头。要做到这一点,源与目标path二者都必须具备同样的格式以保证元素数量上的一致。在本次示例中,我们将如前文图片所示尝试将左箭头转化为右箭头。
<string name="left_arrow">M300,70 l 0,70 -70,-70 0,0 70,-70z</string> <string name="right_arrow">M300,70 l 0,-70 70,70 0,0 -70,70z</string>

接下来,大家需要利用path为left_arrow建立一个初始drawable。在示例代码中,我们将其命名为vector_drawable_left_arrow.xml。
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="64dp" android:width="64dp" android:viewportHeight="600" android:viewportWidth="600" > <path android:name="left_arrow" android:fillColor="#000000" android:pathData="@string/left_arrow"/> /vector>

CPU动画与这里提到的图形变化示例之间,最主要的区别就体现在animator_left_right_arrow.xml文件当中。
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:ration="1000" android:propertyName="pathData" android:valueFrom="@string/left_arrow" android:valueTo="@string/right_arrow" android:valueType="pathType" android:repeatMode="reverse" android:repeatCount="-1"/> </set>

大家可能已经注意到了,valueFrom与valueTo两项属性会引用左箭头与右箭头的path数据,valueType被设定为pathType而propertyName则被设定为pathData。当以上设定完成之后,该animator将明确如何将一组path数据转化为另一组。当该animator结束之后,我们还需要利用新的animated-vector对象将VectorDrawable分配至objectAnimator。
<?xml version="1.0" encoding="utf-8"?> <animated-vector xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/vector_drawable_left_arrow"> <target android:name="left_arrow" android:animation="@animator/animator_left_right_arrows" /> </animated-vector>

最后,大家还需要将该动画drawable分配至ImageView,而后在自己的Java代码中开始运行。
<ImageView
android:id="@+id/left_right_arrow"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_below="@+id/cpu"
android:src="@drawable/animated_arrow" />
mArrowImageView = (ImageView) findViewById( R.id.left_right_arrow );
drawable = mArrowImageView.getDrawable();
if (drawable instanceof Animatable) {
((Animatable) drawable).start();
}

⑶ android:screenOrientation的说明

        // android:screenOrientation="unspecified"

        // android:screenOrientation="landscape"

        // android:screenOrientation="portrait"

        // android:screenOrientation="user"

        // android:screenOrientation="behind"

        // android:screenOrientation="sensor"

        // android:screenOrientation="nosensor"

        // android:screenOrientation="sensorLandscape"

        // android:screenOrientation="sensorPortrait"

        // android:screenOrientation="reverseLandscape"

        // android:screenOrientation="reversePortrait"

        // android:screenOrientation="fullSensor"

## 第二种方式:在Activity中设置或者通过mActivity = pActivity来设置,如果在本Activity中设置可使用##

        // 如:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT),这方法中省略了this;

        // 如果在其它地方,可以使用形如:mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)

        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

"unspecified"默认值,由系统来选择方向。它的使用策略,以及由于选择时特定的上下文环境,可能会因为设备的差异而不同。

"user"使用用户当前首选的方向。

"behind"使用Activity堆栈中与该Activity之下的那个Activity的相同的方向。

"landscape"横向显示(宽度比高度要大)

"portrait"纵向显示(高度比宽度要大)

"reverseLandscape"与正常的横向方向相反显示,在API Level 9中被引入。

"reversePortrait"与正常的纵向方向相反显示,在API Level 9中被引入。

"sensorLandscape"横向显示,但是基于设备传感器,既可以是按正常方向显示,也可以反向显示,在API Level 9中被引入。

"sensorPortrait"纵向显示,但是基于设备传感器,既可以是按正常方向显示,也可以反向显示,在API Level 9中被引入。

"sensor"显示的方向是由设备的方向传感器来决定的。显示方向依赖与用户怎样持有设备;当用户旋转设备时,显示的方向会改变。但是,滚誉宽默认情况下,有些设备不会在所有的四个方向上都旋转,因此要允许在所有的四个方向上都能旋转,就要使用fullSensor属性值。

"fullSensor"显示的方向(4个方向)是由设备的方向传感器来决定的,除了它允许屏幕有虚誉4个显示方向之外,其他与设置为“sensor”时情况类似,不管大亮什么样的设备,通常都会这么做。例如,某些设备通常不使用纵向倒转或横向反转,但是使用这个设置,还是会发生这样的反转。这个值在API Level 9中引入。

"nosensor"屏幕的显示方向不会参照物理方向传感器。传感器会被忽略,所以显示不会因用户移动设备而旋转。除了这个差别之外,系统会使用与“unspecified”设置相同的策略来旋转屏幕的方向。

注意:在给这个属性设置的值是“landscape”或portrait的时候,要考虑硬件对Activity运行的方向要求。正因如此,这些声明的值能够被诸如Google Play这样的服务所过滤,以便应用程序只能适用于那些支持Activity所要求的方向的设备。例如,如果声明了“landscape”、“reverseLandscape”、或“sensorLandscape”,那么应用程序就只能适用于那些支持横向显示的设备。但是,还应该使用<uses-feature>元素来明确的声明应用程序所有的屏幕方向是纵向的还是横行的。例如:<uses-feature android:name=”android.hardware.screen.portrait”/>。这个设置由Google Play提供的纯粹的过滤行为,并且在设备仅支持某个特定的方向时,平台本身并不控制应用程序是否能够被按照。

⑷ android 反地理编码问题

刚好之前的项目用到这个问题了,贴下之前的代码,渗厅大希望能帮助到您,谢谢。
这个方伏仔法就是根据经纬度得到地理信息的方法。
GeoCoder geocoder = GeoCoder.newInstance();

geocoder.reverseGeoCode(new
ReverseGeoCodeOption().location(mCenterLatLng));

geocoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener()
{

@Override

public void
onGetGeoCodeResult(GeoCodeResult geoCodeResult) {

//ToastUtil.showToast(geoCodeResult.getAddress());

}

@Override

public void
onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {

//
ToastUtil.showToast(reverseGeoCodeResult.getAddress());

//将实时的反地理编码信息设置到前台UI控件进行丛竖显示

if
(reverseGeoCodeResult.getAddress() != null ||
!reverseGeoCodeResult.getAddress().equals("")) {

address.setText(reverseGeoCodeResult.getAddress());

} else {

address.setHint("定位失败,请重试或手动输入地址");

}

}

});

⑸ android 反编译后的apk的清单文件在哪个文件夹

使用工具包中的android-reverse-trinea\apktool-1.5.2-windows或下载最新的apktool(需同时下载apktool及对应平台的依赖包,解压后将平台依赖包中的apktool.jar复制到apktool目录下),在命令行运行

apktool.bat
d
-f
xxx.apk
xxx

其中d表示解包,xxx.apk为待反编译apk路径,xxx为目标文件夹名,(apktool不支持中文目录),结果会再apktool.bat所在目录下生成weixin文件夹,现在就可以正确的查看xml资源(包括res下的所有资源,如点9图片、drawable、layout、value、menu等等)了,比如AndroidManifest.xml

⑹ android:ffmpeg命令-视频反序播放

命令:

ffmpeg -i %s 输入好缺视频友搏辩文件,
-filter_complex [0:v]reverse[v] 处理第一个视频文件,做反序,操作命名为v,
-map [v] 复杂输出v文件银谨,
%s 输出文件名。

安卓手机如何用usb连接电脑上网

安卓手机连接电脑上网已经不是什么新鲜的事了,很多朋友都会将家用的电脑,通过随着WiFi或者笔记本设置WiFi共享,让电脑附近的.智能手机可以连接电脑共享WiFi无线网络免费上网。我为大家带来的是安卓手机usb连接电脑上网方法,欢迎大家参考阅读!

安卓手机usb连接电脑上网注意事项:

●电脑必须可以上网;

●安卓手机连接电脑前,请先开启USB调试模式;

●安卓手机需要已经ROOT权限,并且已经在电脑中安装了手机驱动(一般使用过豌豆荚、360手机助手后,一般都已经安装好了,初次连接某台电脑,可以借助手机助手先安装驱动);

安卓手机usb连接电脑上网设置教程

一、首先需要下载安装usb无线上网工具,名称为【Android Reverse Tethering】(里面包含安卓手机工具和PC工具),大家可以网络搜索一下,选择中文版下载;

二、将安卓手机通过USB数据线与电脑连接,放了防止连接失败,连接前,请将电脑中已经开启的豌豆荚等手机助手工具关闭;

三、将下载工具中的Tracetool service.apk安装至安卓手机,运行后点击“Ip Tables”按钮,在弹出的对话框中允许软件获取Root权限,如下图所示。

四、在电脑中运行压缩包里的AndroidTool.exe,先点击“Refresh”按钮获取设备ID,再点击“Check DNS”自动获得DNS,最后点击“Connect”按钮后,你的手机就能通过USB共享PC的有线网络了,如下图所示。

进行以上几步操作,您的安卓手机就可以通过USB连接电脑免费上网了,您可以关于移动网络,然后使用手机打开电脑百事网手机版m.pc841.com看看是否可以免费上网了。

注意事项

如果运行AndroidTool.exe后无法找到设备ID或DNS,请尝试以下三种解决思路:断开USB线并再重复操作一次;检查“计算机管理→服务和应用程序→服务”中的ICS共享服务、DHCP服务和Windows Firewall服务,如果被禁用请手动开启这几项服务;打开任务管理器,将“adb.exe”任务强制关闭。

以上就是安卓手机usb连接电脑上网教程,希望对大家有所帮助,对于没有WiFi网络的朋友来说,这种手机USB连接电脑上网,也是不错的免费上网方式。

⑻ android开发中如何旋转布局

楼主你好,这个可以通过动画来达到这个效果的,代码如下:
只要把您的layout对象传进去就行了
public void showAnimation(View mView)
{
final float centerX = mView.getWidth() / 2.0f;
final float centerY = mView.getHeight() / 2.0f;
//这个是设置需要旋转的角度,我设置的是180度
RotateAnimation rotateAnimation = new RotateAnimation(0, 180, centerX,
centerY);
//这个是设置通话时间的
rotateAnimation.setDuration(1000*3);
rotateAnimation.setFillAfter(true);
mView.startAnimation(rotateAnimation);
}

⑼ 手机如何上网不用流量

1、第一步:准备一部安卓灶岁手机、一台电脑、一根数据线。2、第二步:下载一个软件,软件名叫AndroidReverseTethering,为USB数据线上网使用。3、第三步:让安卓手机获取root的权限。4、第四步:在电脑上安装USB驱动,可以使用一些软件辅助完成USB驱动的完成。5、第五步:开启安卓手机的USB调试模式。方法是薯旅:首先点击设置,然后选择数辩凳应用程序接着点击开发选项,然后选择USB调试即可。6、第六步:对zip安装包进行压缩并进行操作,然后手机安装Tracetoolservice.apk。7、第七步:USB数据线将手机和电脑相连接。运行Usbtunnel软件,记得要获取root权限。8、第八步:在电脑中找到经过解压的目录文件ReverseTethering打开其中的一个文件名叫AndroidTool.exe的文件。9、第九步:然后进行更新操作,你的安卓手机的地址就会出现在其中。如果没有出现安卓手机的地址,就再次进行USB调试操作。这样就完成了整个安装过程,你的手机就可以通过USB数据线上网了。以上就是除了连接wifi,手机上网不用流量的方法,有需要的小伙伴可以了解一下的。KaoJiaZhao.Com

热点内容
广饶编程 发布:2024-04-29 20:39:07 浏览:120
长城服务器管理口ip 发布:2024-04-29 20:15:24 浏览:375
java静态成员变量 发布:2024-04-29 20:04:52 浏览:874
现代伊兰特女生选哪个配置 发布:2024-04-29 19:59:44 浏览:508
d盘不能访问权限 发布:2024-04-29 19:41:56 浏览:415
考试版脚本 发布:2024-04-29 19:33:43 浏览:64
html编译成JavaScript 发布:2024-04-29 00:00:15 浏览:367
html编译器手机 发布:2024-04-28 23:59:22 浏览:518
大宇精雕机的密码是多少 发布:2024-04-28 23:50:02 浏览:457
androidapi查询 发布:2024-04-28 23:44:06 浏览:58