android综合

1 ,手动设置横竖屏
            TestAndroidActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); //设置为置屏幕为竖屏
                   
TestAndroidActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    <activity       android:configChanges="orientation|keyboardHidden"

2 动态更改字符串
<string name="shortcut_installed" msgid="7071557296331322355">"已创建“<xliff:g id="NAME">%s</xliff:g>”快捷方式。"</string>

java代码  String name ="demo";
String string=context.getString(R.string.shortcut_duplicate, name)
string== 已创建demo快捷方式


3. 设置和取消全屏
    public  void setFullScreen(){

    WindowManager.LayoutParams attrs = mWindow.getAttributes();
    attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
    mWindow.setAttributes(attrs);
    mWindow.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
   
    }
     public void setScreenNoLimit(){
     WindowManager.LayoutParams attrs = mWindow.getAttributes();
  
     attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
     mWindow.setAttributes(attrs);
     //取消全屏设置
     mWindow.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
     }

4. android 数据库事务处理

mDatabase.beginTransaction(); 
try{ 
  //在这里执行多个数据库操作 
  //执行过程中可能会抛出异常 
  mDatabase.setTransactionSuccessful(); 
  //在setTransactionSuccessful和endTransaction之间不进行任何数据库操作 
  }catch(Exception e){ 
    //当数据库操作出现错误时,需要捕获异常,结束事务 
    mDatabase.endTransaction(); 
    throw e; 
  } 
  //当所有操作执行完成后结束一个事务 
  mDatabase.endTransaction(); 
备注:当endTransaction()时,会根据是否setTransactionSuccessful()提交数据或者回滚。


5 设置壁纸显示的主题
用<style name="Theme" parent="@android:style/Theme.Holo.Wallpaper.NoTitleBar">这个就可以显示

也可以修改其他主题:
<style name="Theme" parent="@android:style/Theme.Holo.Light.NoActionBar">
  
       <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:colorBackgroundCacheHint">@null</item>
        <item name="android:windowShowWallpaper">true</item>
     </style>

6.andorid 4.0后设置屏幕强制横竖屏
在AndroidManifest.xml中的Activity加入以下属性:
android:configChanges="orientation|screenSize"
java源码:
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
      // TODO Auto-generated method stub
       if(getRequestedOrientation()!=ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){ 
   
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
      }  
       super.onConfigurationChanged(newConfig);
    }


7.                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.DEFAULT" /> 上述同时出现,按home键可出现类似多桌面打开应用的选择框,
<category android:name="android.intent.category.LAUNCHER" /> 觉得是否在桌面生成快捷方式

8.监听开关屏幕
(1):注册监听     @Override
    public void onAttachedToWindow() {
        super.onAttachedToWindow();

        // Listen for broadcasts related to user-presence
        final IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        filter.addAction(Intent.ACTION_USER_PRESENT);
        registerReceiver(mReceiver, filter);
}

(2): private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            final String action = intent.getAction();
            if (Intent.ACTION_SCREEN_OFF.equals(action)) {
               /////屏幕关闭 后要处理的逻辑
            } else if (Intent.ACTION_USER_PRESENT.equals(action)) {
           //打开
            }
        }
    };
(3):取消监听    @Override
    public void onDetachedFromWindow() {
        super.onDetachedFromWindow();
            unregisterReceiver(mReceiver);
  
    }

9.后退键盘 :    @Override
    public void onBackPressed() {}




10 广播接收者
内部类的接收者好像不能在manifest里边静态注册,还是在代码动态注册吧


11. 更新widget的UI,AppWidgetManager对象调用updateAppWidget(),但是不可频繁调用,而且最好在定时器或线程,否则可能导致桌面卡死




12 Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)

(1)在工程下新建lib文件夹,将需要的第三方包拷贝进来。
(2)将引用的第三方包,添加进工作的build path。
(3)(关键的一步)将lib设为源文件夹。

在/libs 文件夹上右键--Build Path--Use as Source Folder

如果不设置,则程序编译可以通过,但运行的时候,会报:
    java.lang.NoClassDefFoundError



若出现如下问题取消之后再重新编译。。。

13.监听数据库变化(未接电话)
注册监听
       ContentResolver resolver = getContentResolver();
        // Register for changes to the call info
        resolver.registerContentObserver(Calls.CONTENT_URI, true,mCallInfoObserver);
       
覆写监听数据库改变
    private final ContentObserver mCallInfoObserver = new ContentObserver(new Handler()) {
    public void onChange(boolean selfChange) {
            //Log.i("hhl", "==LauncherApplications.java==mCallInfoObserver==");
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_MAIN);
    intent.setComponent(sCallComponentName);//  public static final ComponentName sCallComponentName = new ComponentName("com.android.contacts","com.android.contacts.activities.DialtactsActivity");

            intent.addCategory(Intent.CATEGORY_LAUNCHER);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
    mModel.shenduUpdateAppMarkFromRegister(CALL_MARK,intent);
        }
    };
   


14 用法<activity android:clearTaskOnLanunch=”true/false”></activity>
假设,某人从主画面启动了Activity P,并从那里迁移至Activity Q。接下来用户按下HOME,然后返回Activity P。一般,用户可能见到的是Activity Q,因为它是P的Task中最后工作的内容。然而,如果P设定这个特性为“true”,当用户按下HOME并使这个Task再次进入前台时,其上的所有的 Activity(在这里是Q)都将被清除。因此,当返回到这个Task时,用户只能看到P。
但是当P.startActivity(Q)才有效, P.startActivityForResult(Q)时无效




15.控件getHeight和getWidth等于0的解决办法,在onCreat()方法里边写就行

    //-----------------------------------------------方法三    
    ViewTreeObserver vto2 = imageView.getViewTreeObserver();  
    vto2.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
        @Override  
        public void onGlobalLayout() { 
            imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);  
            textView.append("\n\n"+imageView.getHeight()+","+imageView.getWidth()); 
        }  
    });
16.获取所有的应用(带启动项的LAUNCHER)

     final PackageManager packageManager = getPackageManager();

        final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

        // get all apps
        final List<ResolveInfo> apps = packageManager.queryIntentActivities(
                mainIntent, 0); 

17.开机自启动
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED">   
</action>
</intent-filter>

获取开机启动动作的权限permission
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>"

你可能感兴趣的:(android)