當前位置:首頁 » 安卓系統 » 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

熱點內容
360瀏覽器forlinux 發布:2024-07-22 04:37:51 瀏覽:864
猿輔導伺服器地址 發布:2024-07-22 03:46:59 瀏覽:147
小學生用的手機平時用什麼密碼 發布:2024-07-22 03:28:26 瀏覽:612
c語言編程軟體游戲 發布:2024-07-22 03:28:25 瀏覽:792
python職業規劃 發布:2024-07-22 03:28:23 瀏覽:601
小米5s怎麼鎖屏密碼忘了怎麼辦 發布:2024-07-22 03:09:19 瀏覽:72
紙片估演算法 發布:2024-07-22 02:46:32 瀏覽:286
茶杯頭安卓版如何 發布:2024-07-22 02:46:29 瀏覽:69
cl編譯器win7 發布:2024-07-22 02:46:27 瀏覽:694
連接雲伺服器如何注冊 發布:2024-07-22 02:45:48 瀏覽:219