android61
Ⅰ android怎么从引导页进入主页
1 import android.app.Activity;
2 import android.content.Intent;
3 import android.content.SharedPreferences;
4 import android.content.SharedPreferences.Editor;
5 import android.os.Bundle;
6 import android.os.Handler;
7
8 /** 欢迎界面 */
9 public class WelcomeAct extends Activity {
10
11 private boolean isFirstIn = false;
12 private static final int TIME = 2000;
13 private static final int GO_HOME = 1000;
14 private static final int GO_GUIDE = 1001;
15
16 private Handler mHandler = new Handler() {
17 public void handleMessage(android.os.Message msg) {
18 switch (msg.what) {
19 // 跳入主界面
20 case GO_HOME:
21 goHome();
22 break;
23 // 跳入引导页
24 case GO_GUIDE:
25 goGuide();
26 break;
27 }
28 };
29 };
30
31 @Override
32 protected void onCreate(Bundle savedInstanceState) {
33 super.onCreate(savedInstanceState);
34 setContentView(R.layout.welcome);
35 init();
36 }
37
38 private void init() {
39 SharedPreferences perPreferences = getSharedPreferences("jike",
40 MODE_PRIVATE);
41 isFirstIn = perPreferences.getBoolean("isFirstIn", true);
42 if (!isFirstIn) {
43 mHandler.sendEmptyMessageDelayed(GO_HOME, TIME);
44 } else {
45 mHandler.sendEmptyMessageDelayed(GO_GUIDE, TIME);
46 Editor editor = perPreferences.edit();
47 editor.putBoolean("isFirstIn", false);
48 editor.commit();
49 }
50 }
51
52 private void goHome() {
53 Intent i = new Intent(WelcomeAct.this, MainActivity.class);
54 startActivity(i);
55 finish();
56 }
57
58 private void goGuide() {
59 Intent i = new Intent(WelcomeAct.this, Guide.class);
60 startActivity(i);
61 finish();
62 }
63
64 }
1 import java.util.ArrayList;
2 import java.util.List;
3 import android.app.Activity;
4 import android.content.Intent;
5 import android.os.Bundle;
6 import android.support.v4.view.ViewPager;
7 import android.support.v4.view.ViewPager.OnPageChangeListener;
8 import android.view.LayoutInflater;
9 import android.view.View;
10 import android.view.View.OnClickListener;
11 import android.widget.Button;
12 import android.widget.ImageView;
13
14 /** 引导页 */
15 public class Guide extends Activity implements OnPageChangeListener {
16
17 private ViewPager vp;
18 private ViewPagerAdapter vpAdapter;
19 private List<View> views;
20 private ImageView[] dots;
21 private int[] ids = { R.id.iv1, R.id.iv2, R.id.iv3 };
22 private Button start_btn;
23
24 @Override
25 protected void onCreate(Bundle savedInstanceState) {
26 super.onCreate(savedInstanceState);
27 setContentView(R.layout.guide);
28 initViews();
29 initDots();
30 }
31
32 private void initViews() {
33 LayoutInflater inflater = LayoutInflater.from(this);
34
35 views = new ArrayList<View>();
36 views.add(inflater.inflate(R.layout.one, null));
37 views.add(inflater.inflate(R.layout.two, null));
38 views.add(inflater.inflate(R.layout.three, null));
39
40 vpAdapter = new ViewPagerAdapter(views, this);
41 vp = (ViewPager) findViewById(R.id.viewpager);
42 vp.setAdapter(vpAdapter);
43 // 下标从0开始,所以第三个页面是get(2)。
44 start_btn = (Button) views.get(2).findViewById(R.id.start_btn);
45 start_btn.setOnClickListener(new OnClickListener() {
46 @Override
47 public void onClick(View arg0) {
48 Intent i = new Intent(Guide.this, MainActivity.class);
49 startActivity(i);
50 finish();
51 }
52 });
53 vp.setOnPageChangeListener(this);
54 }
55
56 /** 循环设置点 */
57 private void initDots() {
58 dots = new ImageView[views.size()];
59 for (int i = 0; i < views.size(); i++) {
60 dots[i] = (ImageView) findViewById(ids[i]);
61 }
62 }
63
64 @Override /** 滑动状态改变的时候 */
65 public void onPageScrollStateChanged(int arg0) {
66 // TODO Auto-generated method stub
67 }
68
69 @Override /** 当页面被滑动时候调用 */
70 public void onPageScrolled(int arg0, float arg1, int arg2) {
71 // TODO Auto-generated method stub
72 }
73
74 @Override /** 当前新的页面被选中时调用 */
75 public void onPageSelected(int arg0) {
76 for (int i = 0; i < ids.length; i++) {
77 if (arg0 == i) {
78 // 亮点
79 dots[i].setImageResource(R.drawable.login_point_selected);
80 } else {
81 // 暗点
82 dots[i].setImageResource(R.drawable.login_point);
83 }
84 }
85 }
86
87 }
1 <?xml version="1.0" encoding="utf-8"?>
2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent" >
5
6 <android.support.v4.view.ViewPager
7 android:id="@+id/viewpager"
8 android:layout_width="fill_parent"
9 android:layout_height="fill_parent"
10 android:background="#00000000" >
11 </android.support.v4.view.ViewPager>
12
13 <!-- 底部三个点 -->
14 <LinearLayout
15 android:id="@+id/ll"
16 android:layout_width="fill_parent"
17 android:layout_height="wrap_content"
18 android:layout_alignParentBottom="true"
19 android:gravity="center_horizontal"
20 android:orientation="horizontal" >
21 <!-- 选中点 -->
22 <ImageView
23 android:id="@+id/iv1"
24 android:layout_width="wrap_content"
25 android:layout_height="wrap_content"
26 android:src="@drawable/login_point_selected" />
27 <!-- 未选中点 -->
28 <ImageView
29 android:id="@+id/iv2"
30 android:layout_width="wrap_content"
31 android:layout_height="wrap_content"
32 android:src="@drawable/login_point" />
33 <!-- 未选中点 -->
34 <ImageView
35 android:id="@+id/iv3"
36 android:layout_width="wrap_content"
37 android:layout_height="wrap_content"
38 android:src="@drawable/login_point" />
39 </LinearLayout>
40
41 </RelativeLayout>
Ⅱ 安卓手机充不进去电,插上时显示手机在充电,但是电量一直是61% 就是不增加!系统也换了,还是不行,咋办
可能是因为电池的记忆效应,即长期不完全充放电导致的,记忆效应可以消除,但操作复杂危险,不建议,建议可更换电池试试!
Ⅲ 61英寸的手机多大
61英寸的手机是13.5cm 。
61英寸手机长:13.5cm宽:7.6cm,1英寸(in)=2.54厘米,所以6.1英寸=15.494厘米,手机的英寸是指对角线的长短,也就是6.1英寸手机屏幕的对角线长15.494厘米。
手机的操作系统:
安卓
Android是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统,该平台由操作系统、中间件、用户界面和应用软件组成。
Android一词的本义指“机器人”。同时Android的系统架构也和其操作系统一样,采用了分层的架构。从架构图看,Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。
Android在正式发行之前,最开始拥有两个内部测试版本,并且以着名的机器人名称来对其进行命名。
Ⅳ 手机调试Android程序出异常时不打印堆栈信息
打印堆栈是调试的常用方法,一般在系统异常时,我们可以将异常情况下的堆栈打印出来,这样十分方便错误查找。实际上还有另外一个非常有用的功能:分析代码的行为。android代码太过庞大复杂了,完全的静态分析经常是无从下手,因此通过打印堆栈的动态分析也十分必要。
Android打印堆栈的方法,简单归类一下
1. zygote的堆栈mp
实际上这个可以同时mp java线程及native线程的堆栈,对于java线程,java堆栈和native堆栈都可以得到。
使用方法很简单,直接在adb shell或串口中输入:
[plain] view plain
kill -3 <pid>
输出的trace会保存在 /data/anr/traces.txt文件中。这个需要注意,如果没有 /data/anr/这个目录或/data/anr/traces.txt这个文件,需要手工创建一下,并设置好读写权限。
如果需要在代码中,更容易控制堆栈的输出时机,可以用以下命令获取zygote的core mp:
[java] view plain
Process.sendSignal(pid, Process.SIGNAL_QUIT);
原理和命令行是一样的。
不过需要注意两点:
adb shell可能会没有权限,需要root。
android 4.2中关闭了native thread的堆栈打印,详见 dalvik/vm/Thread.cpp的mpNativeThread方法:
[cpp] view plain
dvmPrintDebugMessage(target,
"\"%s\" sysTid=%d nice=%d sched=%d/%d cgrp=%s\n",
name, tid, getpriority(PRIO_PROCESS, tid),
schedStats.policy, schedStats.priority, schedStats.group);
mpSchedStat(target, tid);
// Temporarily disabled collecting native stacks from non-Dalvik
// threads because sometimes they misbehave.
//dvmDumpNativeStack(target, tid);
Native堆栈的打印被关掉了!不过对于大多数情况,可以直接将这个注释打开。
2. debuggerd的堆栈mp
debuggerd是android的一个daemon进程,负责在进程异常出错时,将进程的运行时信息mp出来供分析。debuggerd生 成的coremp数据是以文本形式呈现,被保存在 /data/tombstone/ 目录下(名字取的也很形象,tombstone是墓碑的意思),共可保存10个文件,当超过10个时,会覆盖重写最早生成的文件。从4.2版本开 始,debuggerd同时也是一个实用工具:可以在不中断进程执行的情况下打印当前进程的native堆栈。使用方法是:
[plain] view plain
debuggerd -b <pid>
这可以协助我们分析进程执行行为,但最最有用的地方是:它可以非常简单的定位到native进程中锁死或错误逻辑引起的死循环的代码位置。
3. java代码中打印堆栈
Java代码打印堆栈比较简单, 堆栈信息获取和输出,都可以通过Throwable类的方法实现。目前通用的做法是在java进程出现需要注意的异常时,打印堆栈,然后再决定退出或挽救。通常的方法是使用exception的printStackTrace()方法:
[java] view plain
try {
...
} catch (RemoteException e) {
e.printStackTrace();
...
}
当然也可以只打印堆栈不退出,这样就比较方便分析代码的动态运行情况。Java代码中插入堆栈打印的方法如下:
[java] view plain
Log.d(TAG,Log.getStackTraceString(new Throwable()));
4. C++代码中打印堆栈
C++也是支持异常处理的,异常处理库中,已经包含了获取backtrace的接口,Android也是利用这个接口来打印堆栈信息的。在Android的C++中,已经集成了一个工具类CallStack,在libutils.so中。使用方法:
[cpp] view plain
#include <utils/CallStack.h>
...
CallStack stack;
stack.update();
stack.mp();
使用方式比较简单。目前Andoid4.2版本已经将相关信息解析的很到位,符号表查找,demangle,偏移位置校正都做好了。
[plain] view plain
5. C代码中打印堆栈
C代码,尤其是底层C库,想要看到调用的堆栈信息,还是比较麻烦的。 CallStack肯定是不能用,一是因为其实C++写的,需要重新封装才能在C中使用,二是底层库反调上层库的函数,会造成链接器循环依赖而无法链接。 不过也不是没有办法,可以通过android工具类CallStack实现中使用的unwind调用及符号解析函数来处理。
这里需要注意的是,为解决链接问题,最好使用dlopen方式,查找需要用到的接口再直接调用,这样会比较简单。如下为相关的实现代码,只需要在要 打印的文件中插入此部分代码,然后调用getCallStack()即可,无需包含太多的头文件和修改Android.mk文件:
[cpp] view plain
#define MAX_DEPTH 31
#define MAX_BACKTRACE_LINE_LENGTH 800
#define PATH "/system/lib/libcorkscrew.so"
typedef ssize_t (*unwindFn)(backtrace_frame_t*, size_t, size_t);
typedef void (*unwindSymbFn)(const backtrace_frame_t*, size_t, backtrace_symbol_t*);
typedef void (*unwindSymbFreeFn)(backtrace_symbol_t*, size_t);
static void *gHandle = NULL;
static int getCallStack(void){
ssize_t i = 0;
ssize_t result = 0;
ssize_t count;
backtrace_frame_t mStack[MAX_DEPTH];
backtrace_symbol_t symbols[MAX_DEPTH];
unwindFn unwind_backtrace = NULL;
unwindSymbFn get_backtrace_symbols = NULL;
unwindSymbFreeFn free_backtrace_symbols = NULL;
// open the so.
if(gHandle == NULL) gHandle = dlopen(PATH, RTLD_NOW);
// get the interface for unwind and symbol analyse
if(gHandle != NULL) unwind_backtrace = (unwindFn)dlsym(gHandle, "unwind_backtrace");
if(gHandle != NULL) get_backtrace_symbols = (unwindSymbFn)dlsym(gHandle, "get_backtrace_symbols");
if(gHandle != NULL) free_backtrace_symbols = (unwindSymbFreeFn)dlsym(gHandle, "free_backtrace_symbols");
if(!gHandle ||!unwind_backtrace ||!get_backtrace_symbols || !free_backtrace_symbols ){
ALOGE("Error! cannot get unwind info: handle:%p %p %p %p",
gHandle, unwind_backtrace, get_backtrace_symbols, free_backtrace_symbols );
return result;
}
count= unwind_backtrace(mStack, 1, MAX_DEPTH);
get_backtrace_symbols(mStack, count, symbols);
for (i = 0; i < count; i++) {
char line[MAX_BACKTRACE_LINE_LENGTH];
const char* mapName = symbols[i].map_name ? symbols[i].map_name : "<unknown>";
const char* symbolName =symbols[i].demangled_name ? symbols[i].demangled_name : symbols[i].symbol_name;
size_t fieldWidth = (MAX_BACKTRACE_LINE_LENGTH - 80) / 2;
if (symbolName) {
uint32_t pc_offset = symbols[i].relative_pc - symbols[i].relative_symbol_addr;
if (pc_offset) {
snprintf(line, MAX_BACKTRACE_LINE_LENGTH, "#%02d pc %08x %.*s (%.*s+%u)",
i, symbols[i].relative_pc, fieldWidth, mapName,
fieldWidth, symbolName, pc_offset);
} else {
snprintf(line, MAX_BACKTRACE_LINE_LENGTH, "#%02d pc %08x %.*s (%.*s)",
i, symbols[i].relative_pc, fieldWidth, mapName,
fieldWidth, symbolName);
}
} else {
snprintf(line, MAX_BACKTRACE_LINE_LENGTH, "#%02d pc %08x %.*s",
i, symbols[i].relative_pc, fieldWidth, mapName);
}
ALOGD("%s", line);
}
free_backtrace_symbols(symbols, count);
return result;
}
对sched_policy.c的堆栈调用分析如下,注意具体是否要打印,在哪里打印,还可以通过pid、uid、property等来控制一下,这样就不会被淹死在trace的汪洋大海中。
[plain] view plain
D/SchedPolicy( 1350): #00 pc 0000676c /system/lib/libcutils.so
D/SchedPolicy( 1350): #01 pc 00006b3a /system/lib/libcutils.so (set_sched_policy+49)
D/SchedPolicy( 1350): #02 pc 00010e82 /system/lib/libutils.so (androidSetThreadPriority+61)
D/SchedPolicy( 1350): #03 pc 00068104 /system/lib/libandroid_runtime.so (android_os_Process_setThreadPriority(_JNIEnv*, _jobject*, int, int)+7)
D/SchedPolicy( 1350): #04 pc 0001e510 /system/lib/libdvm.so (dvmPlatformInvoke+112)
D/SchedPolicy( 1350): #05 pc 0004d6aa /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+417)
D/SchedPolicy( 1350): #06 pc 00027920 /system/lib/libdvm.so
D/SchedPolicy( 1350): #07 pc 0002b7fc /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
D/SchedPolicy( 1350): #08 pc 00060c30 /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+271)
D/SchedPolicy( 1350): #09 pc 0004cd34 /system/lib/libdvm.so
D/SchedPolicy( 1350): #10 pc 00049382 /system/lib/libandroid_runtime.so
D/SchedPolicy( 1350): #11 pc 00065e52 /system/lib/libandroid_runtime.so
D/SchedPolicy( 1350): #12 pc 0001435e /system/lib/libbinder.so (android::BBinder::transact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+57)
D/SchedPolicy( 1350): #13 pc 00016f5a /system/lib/libbinder.so (android::IPCThreadState::executeCommand(int)+513)
D/SchedPolicy( 1350): #14 pc 00017380 /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+183)
D/SchedPolicy( 1350): #15 pc 0001b160 /system/lib/libbinder.so
D/SchedPolicy( 1350): #16 pc 00011264 /system/lib/libutils.so (android::Thread::_threadLoop(void*)+111)
D/SchedPolicy( 1350): #17 pc 000469bc /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+63)
D/SchedPolicy( 1350): #18 pc 00010dca /system/lib/libutils.so
D/SchedPolicy( 1350): #19 pc 0000e3d8 /system/lib/libc.so (__thread_entry+72)
D/SchedPolicy( 1350): #20 pc 0000dac4 /system/lib/libc.so (pthread_create+160)
D/SchedPolicy( 1350): #00 pc 0000676c /system/lib/libcutils.so
D/SchedPolicy( 1350): #01 pc 00006b3a /system/lib/libcutils.so (set_sched_policy+49)
D/SchedPolicy( 1350): #02 pc 00016f26 /system/lib/libbinder.so (android::IPCThreadState::executeCommand(int)+461)
D/SchedPolicy( 1350): #03 pc 00017380 /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+183)
D/SchedPolicy( 1350): #04 pc 0001b160 /system/lib/libbinder.so
D/SchedPolicy( 1350): #05 pc 00011264 /system/lib/libutils.so (android::Thread::_threadLoop(void*)+111)
D/SchedPolicy( 1350): #06 pc 000469bc /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+63)
D/SchedPolicy( 1350): #07 pc 00010dca /system/lib/libutils.so
D/SchedPolicy( 1350): #08 pc 0000e3d8 /system/lib/libc.so (__thread_entry+72)
D/SchedPolicy( 1350): #09 pc 0000dac4 /system/lib/libc.so (pthread_create+160)
6. 其它堆栈信息查询
Ⅳ Android keycode
appium扩展提供了pressKeyCode()方法。该方法Android特有。
方法:
pressKeyCode()
发送一个键码的操作。需要一个入参。
driver.pressKeyCode(29);// 字母“a”
电话键
KEYCODE_CALL 拨号键 5
KEYCODE_ENDCALL 挂机键 6
KEYCODE_HOME 按键Home 3
KEYCODE_MENU 菜单键 82
KEYCODE_BACK 返回键 4
KEYCODE_SEARCH 搜索键 84
KEYCODE_CAMERA 拍照键 27
KEYCODE_FOCUS 拍照对焦键 80
KEYCODE_POWER 电源键 26
KEYCODE_NOTIFICATION 通知键 83
KEYCODE_MUTE 话筒静音键 91
KEYCODE_VOLUME_MUTE 扬声器静音键 164
KEYCODE_VOLUME_UP 音量增加键 24
KEYCODE_VOLUME_DOWN 音量减小键 25
控制键
KEYCODE_ENTER 回车键 66
KEYCODE_ESCAPE ESC键 111
KEYCODE_DPAD_CENTER 导航键 确定键 23
KEYCODE_DPAD_UP 导航键 向上 19
KEYCODE_DPAD_DOWN 导航键 向下 20
KEYCODE_DPAD_LEFT 导航键 向左 21
KEYCODE_DPAD_RIGHT 导航键 向右 22
KEYCODE_MOVE_HOME 光标移动到开始键 122
KEYCODE_MOVE_END 光标移动到末尾键 123
KEYCODE_PAGE_UP 向上翻页键 92
KEYCODE_PAGE_DOWN 向下翻页键 93
KEYCODE_DEL 退格键 67
KEYCODE_FORWARD_DEL 删除键 112
KEYCODE_INSERT 插入键 124
KEYCODE_TAB Tab键 61
KEYCODE_NUM_LOCK 小键盘锁 143
KEYCODE_CAPS_LOCK 大写锁定键 115
KEYCODE_BREAK Break/Pause键 121
KEYCODE_SCROLL_LOCK 滚动锁定键 116
KEYCODE_ZOOM_IN 放大键 168
KEYCODE_ZOOM_OUT 缩小键 169
组合键
KEYCODE_ALT_LEFT Alt+Left
KEYCODE_ALT_RIGHT Alt+Right
KEYCODE_CTRL_LEFT Control+Left
KEYCODE_CTRL_RIGHT Control+Right
KEYCODE_SHIFT_LEFT Shift+Left
KEYCODE_SHIFT_RIGHT Shift+Right
基本
KEYCODE_0 按键'0' 7
KEYCODE_1 按键'1' 8
KEYCODE_2 按键'2' 9
KEYCODE_3 按键'3' 10
KEYCODE_4 按键'4' 11
KEYCODE_5 按键'5' 12
KEYCODE_6 按键'6' 13
KEYCODE_7 按键'7' 14
KEYCODE_8 按键'8' 15
KEYCODE_9 按键'9' 16
KEYCODE_A 按键'A' 29
KEYCODE_B 按键'B' 30
KEYCODE_C 按键'C' 31
KEYCODE_D 按键'D' 32
KEYCODE_E 按键'E' 33
KEYCODE_F 按键'F' 34
KEYCODE_G 按键'G' 35
KEYCODE_H 按键'H' 36
KEYCODE_I 按键'I' 37
KEYCODE_J 按键'J' 38
KEYCODE_K 按键'K' 39
KEYCODE_L 按键'L' 40
KEYCODE_M 按键'M' 41
KEYCODE_N 按键'N' 42
KEYCODE_O 按键'O' 43
KEYCODE_P 按键'P' 44
KEYCODE_Q 按键'Q' 45
KEYCODE_R 按键'R' 46
KEYCODE_S 按键'S' 47
KEYCODE_T 按键'T' 48
KEYCODE_U 按键'U' 49
KEYCODE_V 按键'V' 50
KEYCODE_W 按键'W' 51
KEYCODE_X 按键'X' 52
KEYCODE_Y 按键'Y' 53
KEYCODE_Z 按键'Z' 54
Ⅵ android viewmodel取消线程
在Activity开启的子线程并不会自动随Activity的destroy而关闭,所以必须手动去关闭子线程或者通过boolean的方式让子线程结束运行。开启的子线程有for循环的要更加注意。
1 package com.lsw;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.os.Handler;
6 import android.os.Message;
7 import android.util.Log;
8 public class ThreadDemoActivity extends Activity {
9 private static final String TAG = "ThreadDemo";
10 private int count = 0;
11 private Handler mHandler = new MyHandler();
12 boolean stopThread=false;
13
14 private Runnable mRunnable = new Runnable() {
15
16 public void run() {
17
18 while (!stopThread)
19 {
20 count++;
21 try
22 {
23 Thread.sleep(2000);
24 }
25 catch (InterruptedException e)
26 {
27 // TODO Auto-generated catch block
28 e.printStackTrace();
29 }
30
31 //虽然Message的构造函数是public的,但是最好是使用Message.obtain( )或Handler.obtainMessage( )函数来获取Message对象,因为Message的实现中包含了回收再利用的机制,可以提供效率。
32 Message message=mHandler.obtainMessage();
33 message.what=0;
34 message.obj=count;
35 mHandler.sendMessage(message);
36 }
37 }
38 };
39
40 @Override
41 public void onCreate(Bundle savedInstanceState) {
42 super.onCreate(savedInstanceState);
43 setContentView(R.layout.main);
44 //开启子线程
45 new Thread(mRunnable).start();
46 }
47
48 protected void onDestroy() {
49 System.out.println("-----------onDestroy------");
50 stopThread=true;
51 super.onDestroy();
52 };
53
54 class MyHandler extends Handler{
55
56 @Override
57 public void handleMessage(Message msg)
58 {
59 // TODO Auto-generated method stub
60 Log.e(TAG, Thread.currentThread().getName() + " " +msg.obj);
61 setTitle("" +msg.obj);
62 }
63 }
64
65 }
Ⅶ android 反编译出来的label61是什么意思啊
反编译出来的很多class代码,里面的变量的名称都不是原来的名称,是内存执行程序段的时候的标识符,很多都是很乱了。,你要看class的context才知道
Ⅷ android 镂空遮罩怎么用
看到一本电子杂志上有遮罩层的效果,感觉很漂亮,以为很麻烦,搜索了很多关于android遮罩层的,也没有得出一点思路,原来就是一个透明的效果,然后上面弹出的控件是透明或者半透明之类的,可以选择颜色,还是#ARBG,其中A就是传说中的透明色的值(可以根据需要设置透明的效果),废话不多说了,发一个简单的Demo吧,是我山寨的那本杂志的效果:(由于杂志内容主要是图片,弹出层才是给出的文字信息,所以我猜测是用Gallery显示的杂志内容)
xml布局文件:
[c-sharp] view plainprint?
01.<?xml version="1.0" encoding="utf-8"?>
02.<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
03. android:id="@+id/layout"
04. android:layout_width="fill_parent"
05. android:layout_height="fill_parent"
06. >
07. <Gallery
08. android:id="@+id/showGallery"
09. android:layout_width="fill_parent"
10. android:layout_height="fill_parent"
11. android:spacing="0dip"
12. />
13. <RelativeLayout
14. android:orientation="horizontal"
15. android:layout_width="fill_parent"
16. android:layout_height="wrap_content"
17. android:layout_gravity="bottom"
18. android:background="#86222222"
19. >
20. <TextView
21. android:id="@+id/titleTextView"
22. android:layout_width="wrap_content"
23. android:layout_height="wrap_content"
24. android:layout_toRightOf="@id/secondKillButton"
25. android:textColor="#ff0000"
26. />
27. <Button
28. android:id="@+id/unfoldButton"
29. android:layout_width="wrap_content"
30. android:layout_height="wrap_content"
31. android:layout_alignParentRight="true"
32. android:text="展开"
33. />
34. </RelativeLayout>
35.</FrameL<textarea name="code" class="xhtml" cols="50" rows="15"><?xml version="1.0" encoding="utf-8"?>
36.<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
37. android:id="@+id/layout"
38. android:layout_width="fill_parent"
39. android:layout_height="fill_parent"
40. >
41. <Gallery
42. android:id="@+id/showGallery"
43. android:layout_width="fill_parent"
44. android:layout_height="fill_parent"
45. android:spacing="0dip"
46. />
47. <RelativeLayout
48. android:orientation="horizontal"
49. android:layout_width="fill_parent"
50. android:layout_height="wrap_content"
51. android:layout_gravity="bottom"
52. android:background="#86222222"
53. >
54. <TextView
55. android:id="@+id/titleTextView"
56. android:layout_width="wrap_content"
57. android:layout_height="wrap_content"
58. android:layout_toRightOf="@id/secondKillButton"
59. android:textColor="#ff0000"
60. />
61. <Button
62. android:id="@+id/unfoldButton"
63. android:layout_width="wrap_content"
64. android:layout_height="wrap_content"
65. android:layout_alignParentRight="true"
66. android:text="展开"
67. />
68. </RelativeLayout>
69.</FrameLayout>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Gallery
android:id="@+id/showGallery"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:spacing="0dip"
/>
<RelativeLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="#86222222"
>
<TextView
android:id="@+id/titleTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/secondKillButton"
android:textColor="#ff0000"
/>
<Button
android:id="@+id/unfoldButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="展开"
/>
</RelativeLayout>
</FrameL<textarea name="code" class="xhtml" cols="50" rows="15"><?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Gallery
android:id="@+id/showGallery"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:spacing="0dip"
/>
<RelativeLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="#86222222"
>
<TextView
android:id="@+id/titleTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/secondKillButton"
android:textColor="#ff0000"
/>
<Button
android:id="@+id/unfoldButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="展开"
/>
</RelativeLayout>
</FrameLayout>
Ⅸ android字符串转换成16进制怎么转
android字符串转换成16进制,参考如下内容:
/**
* 字符串转换成十六进制字符串
* @param String str 待转换的ASCII字符串
* @return String 每个Byte之间空格分隔,如: [61 6C 6B]
*/
public static String str2HexStr(String str)
{
char[] chars = "0123456789ABCDEF".toCharArray();
StringBuilder sb = new StringBuilder("");
byte[] bs = str.getBytes();
int bit;
for (int i = 0; i < bs.length; i++)
{
bit = (bs[i] & 0x0f0) >> 4;
sb.append(chars[bit]);
bit = bs[i] & 0x0f;
sb.append(chars[bit]);
sb.append(' ');
}
return sb.toString().trim();
}
Ⅹ 华为荣耀V8安卓6.0可以连接XBOXONE手柄吗
华为荣耀V8安卓6.0可以连接XBOXONE手柄吗?作为全球也许是最知名的开源操作系统,安卓(Android)的成功可以说是有目共睹——毕竟,在持续发展了九个大版本之后,如今的它已经占据了绝大多数智能手机的市场份额,在兼容性、稳定性上的表现基本上已经无可挑剔了。
然而,或许并不为人所知的是,即便是这样的安卓操作系统,在它的内部,依然存在着大量或大或小的Bug(wiki:程序错误),有些甚至还是多年都未能解决的“历史遗留问题”。比如说,就在最近,一则来自知名开发网站XDA的、原本应该只有专业开发者才会感兴趣的安卓Bug信息,就意外地吸引了大众用户的关注。
今日热榜
158岁范伟妻子曝光,原来是大家熟悉的她!两人结婚30年恩爱如初热度93万
2杭州男子帮女同事接了个电话 却被她老公暴打!只因为脱口而出的一句话……热度63万
3岳阳一卖淫团伙覆灭!单次收费130,当场抓获违法人员4名热度61万
迟到两年的Bug修复,却意外地吸引了眼球?
2016年8月份,一群开发者向谷歌提交了一份常规的Bug报告——报告显示,当他们尝试通过蓝牙连接安卓手机与XBOX One手柄时,却发现两者之间存在着严重的按键映射错误。打比方说,明明在手柄上按了“←”,但系统里却以为按下的是“A”键——而且严重的时候,在不同的程序里这种按键映射错误还各不相同。
图片来自Android Police
当然,稍有常识的游戏玩家都知道,按键映射本身不算多严重的问题。真要修复起来也不麻烦。但令人没有想到的是,就是这么简单的一个Bug,谷歌却一直拖延了两年时间之久,才终于在最近宣布Bug解决……
更令人没有想到的是,就是这么一个简单的、开发者向的消息,却引发了超乎想象的关注——事实上,无论是在国内还是国外的各种科技咨询网站上,笔者都看到了转载都报道“安卓修复与XBOX手柄的兼容性问题”……
是的,玩家们有理由高兴,但它有玩家么?
为何一则短短的、专业的系统Bug修复信息会引发如此多的报道与关注?它同时涉及到了“谷歌”和“微软”两家巨头,自然是重要的原因之一。但如果并不是因为单纯这个原因的话,那么问题的关键,可能就出在“安卓系统连接XBOX One手柄”这件事本身的意义上了。
在知名的海外安卓技术站Android Police上,我们看到了更详细的关于这件事的报道。Android Police的编辑们甚至还专门对修复之后的手柄兼容性进行了测试——值得注意的是,他们主要是通过运行游戏的方式来测试的。也就是说,在这几位老外看来,旧有的Bug主要影响的是那些希望用Xbox One S手柄,在安卓手机或者平板上玩游戏的用户。而如今,问题得到解决,这些用户应该感到高兴了!
emmmm……看起来似乎很有道理,但只有一个问题——会有人使用Xbox手柄,却在安卓设备上玩游戏么?
其实,对于这件事,中国的玩家们或许有着更大的发言权。只要在各大在线商城随便搜索一下热卖的“吃鸡神器”、“手游神器”,你就会发现大量价廉物美的手机专用游戏手柄。它们不仅价格远低于Xbox One S的原装手柄,还会设计有便于固定在手机上的卡扣、握把或是其他机构——有趣的是,索尼也曾为PS4手柄推出类似的手机固定套件,但是微软始终没有过。这就不禁令人怀疑——Xbox手柄是否本身根本就没有为在手机上使用而设计?如果没有,那么又会有多少真正的玩家,具备非要使用Xbox One手柄连接安卓手机玩游戏的需求?
其实,大家或许从一开始就弄错了一件事
从2016年8月收到用户反馈,到2018年8月宣布Bug修复,谷歌的工程师们花了差不多整整两年才解决了这个看起来并不复杂的手柄按键映射问题。是怎样的困难导致需要如此漫长的时间来修复一个简单的Bug?据笔者熟识的一位专家透露,真实的原因很可能与技术难度完全无关,而是在于“问题本身太小众、请求的人数太少”。
其实,从前文的分析也不难看出,所谓“用Xbox One手柄连接安卓设备玩游戏,发现按键映射存在Bug”,这件事本身是千真万确没错。但由此得出“最初请求修复Bug的人一定是游戏玩家”,这个推断却并不见得正确。
要知道,作为当前全球最有影响力的主机手柄之一,同时也是全球研发成本最高的主机手柄(这个没有之一),Xbox One手柄真正的价值决不在于它是否能连接手机玩手游,而在于它是许多工程设计项目、甚至是军事领域的“常客”。