当前位置: 编程技术>移动开发
本页文章导读:
▪NSFileManager惯用的一些操作 NSFileManager常用的一些操作
1.获取文件的最后修改时间:
NSDictionary* fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:nil];
DLog(@"%@", [fileAttributes objectForKey:NSFileModificationDate]);
.........
▪ widget的打造步骤 widget的制作步骤
下面介绍一下widget的制作步骤: 1.申明AppWidgetProvider类在应用的AndroidManifest.xml文件里 <receiver android:name="com.Demo_barcodeWidget.BarcodeWidgetProvider" android:icon="@dr.........
▪ Activity其间的传值 Activity之间的传值
Activity之间的传值:
方法1: 1给2传值
Activity1:
final Intent intent = new Intent(mCtx,Activity1.class) ;
//将当前用户传递下去
intent.putExtra("user", mUser);
startActivity(intent);
里边mU.........
[1]NSFileManager惯用的一些操作
来源: 互联网 发布时间: 2014-02-18
NSFileManager常用的一些操作
1.获取文件的最后修改时间:
NSDictionary* fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:nil]; DLog(@"%@", [fileAttributes objectForKey:NSFileModificationDate]);
2.遍历目录下的符合条件的文件:
NSArray* fiieList = [ [[NSFileManager defaultManager] contentsOfDirectoryAtPath:kNotUploadXmlFolder error:nil] pathsMatchingExtensions:[NSArray arrayWithObject:@"xml"]]; DLog(@"%@", fiieList);
3.删除某个文件:
[[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/11.xml", kNotUploadXmlFolder] error:nil];
4. 检测某个文件是否存在
[[NSFileManager defaultManager]fileExistsAtPath:kDatabaseFullPath] //这里kDatabaseFullPath必须是全路径,eg:/users/xxx/111/database.db
[2] widget的打造步骤
来源: 互联网 发布时间: 2014-02-18
widget的制作步骤
下面介绍一下widget的制作步骤:
1.申明AppWidgetProvider类在应用的AndroidManifest.xml文件里 <receiver android:name="com.Demo_barcodeWidget.BarcodeWidgetProvider"
android:icon="@drawable/homenav_barcode"
android:label="Yellowbook Barcode Scanner">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/barcode_widget" />
</receiver>
•<intent-filter>元素必须包含带有android:name属性的<action>元素。这一属性指明 AppWigetProvider可接收ACTION_APPWIDGET_UPDATE广播。这是你必须明确声明的唯一广播。 AppWidgetManager自动发送Widget广播到AppWidgetProvider。
• <meta-data>元素指明AppWidgetProviderInfo资源,需要如下属性:android:name-指明元数据名称。使用android.appwidget.provider把数据指定为对AppWidgetProviderInfo的描述。
android:resource-指明AppWidgetProviderInfo资源的位置。
2. 增加AppWidgetProviderInfor元数据在res/xml/widget_provider.xml中:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="47dip"
android:minHeight="44dip"
android:updatePeriodMillis="10000"
>
</appwidget-provider>
•这个文件放在res/xml/文件夹下,若res中没有xml文件夹,则需新建一个。
•注:AppWidgetProviderInfo 定义基本的Widget属性,如最小布局维数,初始的布局资源,更新Widget频率和在创建时间启动Activity的配置。在XML资源里使用单一的<appwidget-provider>元素定义AppWidgetProviderInfo对象并且把它保存在工程的res/xml /文件夹下。
3. 创建Widget布局文件在res/layout/中:
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:src="/blog_article/@drawable/homenav_barcode/index.html" android:id="@+id/barcode_widget_logo"
android:layout_height="wrap_content" android:layout_width="wrap_content"></ImageView>
•这是widget在桌面显示的layout。本例中很简单,只有一个imageview。
•你必须在XML里为你的Widget定义一个初始的布局文件,然后保存在工程的res/layout/目录下。如果你熟悉在XML中声明布局,那么创建 Widget布局是简单的。你可以使用View对象设计你的Widget,然而你必须注意Widget基于RemoteViews,它并不支持布局或者 view控件中的每一种。
4.创建appWidgetProvider类
package com.Demo_barcodeWidget;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;
public class BarcodeWidgetProvider extends AppWidgetProvider{
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){
RemoteViews mRemoteViews = buildUpdate(context);
ComponentName thisWidget = new ComponentName(context, BarcodeWidgetProvider.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(thisWidget, mRemoteViews);
}
private RemoteViews buildUpdate(Context context) {
RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.barcode_scanner_widget);
Intent i = new Intent(context, Demo_barcodeWidget.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
rv.setOnClickPendingIntent(R.id.barcode_widget_logo, PendingIntent.getActivity(context, 0, i, 0));
return rv;
}
}
•继承于BroadcastReceiver的AppWidgetProvider类是一种很方便处理Widget广播的类。 AppWidgetProvider只接收与Widget相关的事件广播,如当Widget更新,删除,可用和不可用的时候。当这些广播事件发生的时候,AppWidgetProvider收到如下的方法调用:onUpdated,onDeleted,onEnabled,onDisabled,onReceive。
•最重要的AppWidgetProvider回调函数是onUpdated,因为当每一个Widget增加的时候它都会被调用(除非你使用配置 Activity)。如果你的Widget接收任意用户交互事件,那么你需要在回调函数中注册事件handler。如果你的Widget没有创建临时文件或者数据库,或者执行需要clean-up的工作,那么onUpdated可能是你需要注册的唯一回调函数。
•这里使用 remoteView来实现widget的事件响应(onclick事件)和widget页面的显示刷新(实际上本例很简单,只是说明widget的制作步骤。并没有显示什么数据,而widget得click事件也只是跳转到程序的main activity)。实际上widget功能丰富:别看它们小,却服务周到,它可以为你报告新闻、帮你买东西、列出你最喜欢的乐队,还有你最近看的视频。另外,它还是一个殷勤的管家,你不必亲自去Flickr或者天气预报网站,Widget会将信息主动带给你。Widget可以以多种形式呈现出来,幻灯秀、视频、地图、新闻、小游戏……
下面介绍一下widget的制作步骤:
1.申明AppWidgetProvider类在应用的AndroidManifest.xml文件里 <receiver android:name="com.Demo_barcodeWidget.BarcodeWidgetProvider"
android:icon="@drawable/homenav_barcode"
android:label="Yellowbook Barcode Scanner">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/barcode_widget" />
</receiver>
•<intent-filter>元素必须包含带有android:name属性的<action>元素。这一属性指明 AppWigetProvider可接收ACTION_APPWIDGET_UPDATE广播。这是你必须明确声明的唯一广播。 AppWidgetManager自动发送Widget广播到AppWidgetProvider。
• <meta-data>元素指明AppWidgetProviderInfo资源,需要如下属性:android:name-指明元数据名称。使用android.appwidget.provider把数据指定为对AppWidgetProviderInfo的描述。
android:resource-指明AppWidgetProviderInfo资源的位置。
2. 增加AppWidgetProviderInfor元数据在res/xml/widget_provider.xml中:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="47dip"
android:minHeight="44dip"
android:updatePeriodMillis="10000"
>
</appwidget-provider>
•这个文件放在res/xml/文件夹下,若res中没有xml文件夹,则需新建一个。
•注:AppWidgetProviderInfo 定义基本的Widget属性,如最小布局维数,初始的布局资源,更新Widget频率和在创建时间启动Activity的配置。在XML资源里使用单一的<appwidget-provider>元素定义AppWidgetProviderInfo对象并且把它保存在工程的res/xml /文件夹下。
3. 创建Widget布局文件在res/layout/中:
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:src="/blog_article/@drawable/homenav_barcode/index.html" android:id="@+id/barcode_widget_logo"
android:layout_height="wrap_content" android:layout_width="wrap_content"></ImageView>
•这是widget在桌面显示的layout。本例中很简单,只有一个imageview。
•你必须在XML里为你的Widget定义一个初始的布局文件,然后保存在工程的res/layout/目录下。如果你熟悉在XML中声明布局,那么创建 Widget布局是简单的。你可以使用View对象设计你的Widget,然而你必须注意Widget基于RemoteViews,它并不支持布局或者 view控件中的每一种。
4.创建appWidgetProvider类
package com.Demo_barcodeWidget;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;
public class BarcodeWidgetProvider extends AppWidgetProvider{
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){
RemoteViews mRemoteViews = buildUpdate(context);
ComponentName thisWidget = new ComponentName(context, BarcodeWidgetProvider.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(thisWidget, mRemoteViews);
}
private RemoteViews buildUpdate(Context context) {
RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.barcode_scanner_widget);
Intent i = new Intent(context, Demo_barcodeWidget.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
rv.setOnClickPendingIntent(R.id.barcode_widget_logo, PendingIntent.getActivity(context, 0, i, 0));
return rv;
}
}
•继承于BroadcastReceiver的AppWidgetProvider类是一种很方便处理Widget广播的类。 AppWidgetProvider只接收与Widget相关的事件广播,如当Widget更新,删除,可用和不可用的时候。当这些广播事件发生的时候,AppWidgetProvider收到如下的方法调用:onUpdated,onDeleted,onEnabled,onDisabled,onReceive。
•最重要的AppWidgetProvider回调函数是onUpdated,因为当每一个Widget增加的时候它都会被调用(除非你使用配置 Activity)。如果你的Widget接收任意用户交互事件,那么你需要在回调函数中注册事件handler。如果你的Widget没有创建临时文件或者数据库,或者执行需要clean-up的工作,那么onUpdated可能是你需要注册的唯一回调函数。
•这里使用 remoteView来实现widget的事件响应(onclick事件)和widget页面的显示刷新(实际上本例很简单,只是说明widget的制作步骤。并没有显示什么数据,而widget得click事件也只是跳转到程序的main activity)。实际上widget功能丰富:别看它们小,却服务周到,它可以为你报告新闻、帮你买东西、列出你最喜欢的乐队,还有你最近看的视频。另外,它还是一个殷勤的管家,你不必亲自去Flickr或者天气预报网站,Widget会将信息主动带给你。Widget可以以多种形式呈现出来,幻灯秀、视频、地图、新闻、小游戏……
[3] Activity其间的传值
来源: 互联网 发布时间: 2014-02-18
Activity之间的传值
从程序开始,到结束
这个我不大清楚,跳转和传数据应该是不同的线程吧,如果页跳过去了,数据还没传完,而数据和页面信息相关性很大,应该会出现这种情况,或者也是android的bug.应该加入同步支持,你可以试验一下,呵呵
是的,给人一种一气呵成的感觉,不然会穿一堆特别sb的变量而且,会有修改的先后之分。
但是不知道application对于bean修改权限什么的,有没有逻辑上的安全隐患啊
你这是肯定句,疑问句,还是反问句啊
哦,刚看懂,我一会上一个,呵呵
Activity之间的传值:
方法1: 1给2传值
Activity1:
final Intent intent = new Intent(mCtx,Activity1.class) ; //将当前用户传递下去 intent.putExtra("user", mUser); startActivity(intent);
里边mUser是一个对象,传的事实上是一个Map,"user"是对象mUser的key
Activity2:
mUser = (User) getIntent().getSerializableExtra("user");
mUser是对象,getIntent()是Activity的方法,值得注意的是得到的mUser 不是引用,而是new了一个对象并赋值,如果这东西要回传的话,要startActivity(intent);就会很SB。
所以用方法2
------------------------------------------------
方法2:
Activity1:
intent.setClass(mCtx, Activity2.class); intent.putExtra("user", mUser); startActivityForResult(intent, 1);
并且在Activity1中
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(resultCode==1 || data.getSerializableExtra("putUserbyhua")!=null) mUser=(User) getIntent().getSerializableExtra("putUserbyhua"); }
Activity2:
获取传来的值
mIntent = getIntent() mUser=(User) mIntent.getSerializableExtra(UserConst.USER_DATA);
在按返回键时跳转到1
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK){ final Intent intent=new Intent(); intent.setClass(mCtx, Activity2.class); intent.putExtra("putUserbyhua",mUser); this.setResult(1); this.finish(); } return super.onKeyDown(keyCode, event); }
1 楼
doloveme
2011-05-10
<p ><span ><span >Android中Activity共享变量的另一方法:Application context:</span></span></p>
<p> 多个Activity中经常使用同一变量时,使用Bundle则比较麻烦,每次调用Activity都需要设置一次。
如想在整个应用中使用,在java中一般是使用静态变量,而在android中有个更优雅的方式是使用Application context。
</p>
<p> 新建一个类,继承自Application</p>
<p> </p>
<p> </p>
<pre name="code" > class MyApp extends Application {
private String myState;
public String getState() {
return myState;
}
public void setState(String s) {
myState = s;
}
}
class MyApp extends
Application {
private String myState;
public String getState() {
return myState;
}
public void setState(String s) {
myState = s;
}
}</pre>
<p> </p>
<p> </p>
<p> </p>
<p><span Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px;">在AndroidManifest.xml的application加个name属性就可以了,如下面所示:<br ><br > android:name=".MyApp" android:icon="@drawable/icon"<br > android:label="@string/app_name"></span></p>
<p> </p>
<p><span Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px;">使用时:</span><span Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px;"><span >(这个是重点)</span></span></p>
<p> </p>
<p> </p>
<pre name="code" > class Blah extends Activity {
@Override
public void onCreate(Bundle b){
...
MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getState();
...
}
}
class Blah extends
Activity {
@Override
public void onCreate(Bundle b){
...
MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getState();
...
}
}</pre>
<p> </p>
<p> </p>
<p> </p>
<p><span >当然搞个单例也可以啊,呵呵,以后研究</span></p>
<p> </p>
<p> 多个Activity中经常使用同一变量时,使用Bundle则比较麻烦,每次调用Activity都需要设置一次。
如想在整个应用中使用,在java中一般是使用静态变量,而在android中有个更优雅的方式是使用Application context。
</p>
<p> 新建一个类,继承自Application</p>
<p> </p>
<p> </p>
<pre name="code" > class MyApp extends Application {
private String myState;
public String getState() {
return myState;
}
public void setState(String s) {
myState = s;
}
}
class MyApp extends
Application {
private String myState;
public String getState() {
return myState;
}
public void setState(String s) {
myState = s;
}
}</pre>
<p> </p>
<p> </p>
<p> </p>
<p><span Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px;">在AndroidManifest.xml的application加个name属性就可以了,如下面所示:<br ><br > android:name=".MyApp" android:icon="@drawable/icon"<br > android:label="@string/app_name"></span></p>
<p> </p>
<p><span Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px;">使用时:</span><span Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px;"><span >(这个是重点)</span></span></p>
<p> </p>
<p> </p>
<pre name="code" > class Blah extends Activity {
@Override
public void onCreate(Bundle b){
...
MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getState();
...
}
}
class Blah extends
Activity {
@Override
public void onCreate(Bundle b){
...
MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getState();
...
}
}</pre>
<p> </p>
<p> </p>
<p> </p>
<p><span >当然搞个单例也可以啊,呵呵,以后研究</span></p>
<p> </p>
2 楼
windfree
2011-05-16
楼主总结的不错,application确实很方便
3 楼
myyuren
2011-05-16
我遇到了一个这方面的问题,还请楼主解答。
http://topic.csdn.net/u/20110513/14/6b948267-4a2f-4f0d-9318-8f6e685bb5d8.html
这是连接。
activity A 跳向 activity B 时,传递一个List<对象> 出现黑屏现 象,有网友说是oncreate事件加载过多数据,list.size()==500左右的时候就开始黑屏。
http://topic.csdn.net/u/20110513/14/6b948267-4a2f-4f0d-9318-8f6e685bb5d8.html
这是连接。
activity A 跳向 activity B 时,传递一个List<对象> 出现黑屏现 象,有网友说是oncreate事件加载过多数据,list.size()==500左右的时候就开始黑屏。
4 楼
jstl1point0
2011-05-16
application 共享很不错。
5 楼
xucm1986
2011-05-17
我们一直都用application
6 楼
xucm1986
2011-05-17
application的生命周期知道哪为大虾可以指点下,在下不身感激
7 楼
doloveme
2011-05-17
xucm1986 写道
application的生命周期知道哪为大虾可以指点下,在下不身感激
从程序开始,到结束
8 楼
doloveme
2011-05-17
myyuren 写道
我遇到了一个这方面的问题,还请楼主解答。
http://topic.csdn.net/u/20110513/14/6b948267-4a2f-4f0d-9318-8f6e685bb5d8.html
这是连接。
activity A 跳向 activity B 时,传递一个List<对象> 出现黑屏现 象,有网友说是oncreate事件加载过多数据,list.size()==500左右的时候就开始黑屏。
http://topic.csdn.net/u/20110513/14/6b948267-4a2f-4f0d-9318-8f6e685bb5d8.html
这是连接。
activity A 跳向 activity B 时,传递一个List<对象> 出现黑屏现 象,有网友说是oncreate事件加载过多数据,list.size()==500左右的时候就开始黑屏。
这个我不大清楚,跳转和传数据应该是不同的线程吧,如果页跳过去了,数据还没传完,而数据和页面信息相关性很大,应该会出现这种情况,或者也是android的bug.应该加入同步支持,你可以试验一下,呵呵
9 楼
doloveme
2011-05-17
jstl1point0 写道
application 共享很不错。
是的,给人一种一气呵成的感觉,不然会穿一堆特别sb的变量而且,会有修改的先后之分。
但是不知道application对于bean修改权限什么的,有没有逻辑上的安全隐患啊
10 楼
doloveme
2011-05-17
<div >doloveme 写道</div>
<div >
<p ><span ><span >Android中Activity共享变量的另一方法:Application context:</span></span></p>
<p> 多个Activity中经常使用同一变量时,使用Bundle则比较麻烦,每次调用Activity都需要设置一次。
如想在整个应用中使用,在java中一般是使用静态变量,而在android中有个更优雅的方式是使用Application context。
</p>
<p> 新建一个类,继承自Application</p>
<p> </p>
<p> </p>
<pre name="code" > class MyApp extends Application {
private String myState;
public String getState() {
return myState;
}
public void setState(String s) {
myState = s;
}
}
</pre>
<p> </p>
<p> </p>
<p> </p>
<p><span Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px;">在AndroidManifest.xml的application加个name属性就可以了,如下面所示:<br><br> android:name=".MyApp" android:icon="@drawable/icon"<br> android:label="@string/app_name"></span></p>
<p> </p>
<p><span Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px;">使用时:</span><span Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px;"><span >(这个是重点)</span></span></p>
<p> </p>
<p> </p>
<pre name="code" > class Blah extends Activity {
@Override
public void onCreate(Bundle b){
...
MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getState();
...
}
}
class Blah extends
Activity {
@Override
public void onCreate(Bundle b){
...
MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getState();
...
}
}</pre>
<p> </p>
<p> </p>
<p> </p>
<p><span >当然搞个单例也可以啊,呵呵,以后研究</span></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p><span >事实上 application就是一种他妈的单例</span></p>
<p> </p>
</div>
<p> </p>
<div >
<p ><span ><span >Android中Activity共享变量的另一方法:Application context:</span></span></p>
<p> 多个Activity中经常使用同一变量时,使用Bundle则比较麻烦,每次调用Activity都需要设置一次。
如想在整个应用中使用,在java中一般是使用静态变量,而在android中有个更优雅的方式是使用Application context。
</p>
<p> 新建一个类,继承自Application</p>
<p> </p>
<p> </p>
<pre name="code" > class MyApp extends Application {
private String myState;
public String getState() {
return myState;
}
public void setState(String s) {
myState = s;
}
}
</pre>
<p> </p>
<p> </p>
<p> </p>
<p><span Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px;">在AndroidManifest.xml的application加个name属性就可以了,如下面所示:<br><br> android:name=".MyApp" android:icon="@drawable/icon"<br> android:label="@string/app_name"></span></p>
<p> </p>
<p><span Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px;">使用时:</span><span Microsoft Yahei', Simsun; font-size: 14px; line-height: 21px;"><span >(这个是重点)</span></span></p>
<p> </p>
<p> </p>
<pre name="code" > class Blah extends Activity {
@Override
public void onCreate(Bundle b){
...
MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getState();
...
}
}
class Blah extends
Activity {
@Override
public void onCreate(Bundle b){
...
MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getState();
...
}
}</pre>
<p> </p>
<p> </p>
<p> </p>
<p><span >当然搞个单例也可以啊,呵呵,以后研究</span></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p><span >事实上 application就是一种他妈的单例</span></p>
<p> </p>
</div>
<p> </p>
11 楼
amaker8
2011-05-19
LZ上个能运行的实例。。。
12 楼
doloveme
2011-05-20
amaker8 写道
LZ上个能运行的实例。。。
你这是肯定句,疑问句,还是反问句啊
13 楼
doloveme
2011-05-20
amaker8 写道
LZ上个能运行的实例。。。
哦,刚看懂,我一会上一个,呵呵
14 楼
doloveme
2011-05-20
现在好了,有代码了
最新技术文章: