怎么怎样退订流量套餐套餐流量?

Android Studio开发环境建立aidl文件,怎么生成相应的java文件? - 知乎68被浏览29945分享邀请回答263 条评论分享收藏感谢收起
aidl.srcDirs = ['src/main/java']
这样编译,就OK了
34 条评论分享收藏感谢收起更多与世界分享知识、经验和见解Android Studio实现Service AIDL_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Android Studio实现Service AIDL
来源:Linux社区&
作者:teenyboy
今天要开发过程中要用到AIDL的调用,之前用的eclipse有大量教程,用起来很方便,现在刚换了 studio,不可否认studio真的很强大,只是很多功能还需要摸索。
AIDL(Android Interface Definition Language)是Android接口定义语言的意思,它可以用于让某个Service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享同一个Service的功能。
言归正传,今天的主题是远程Service建立AIDL进行通信,通过一个小demo来展示AIDL在Android studio中的实现:
1. 搭建了一个简单的Service框架,仅包括startService(intent),框架在后面代码中展示出来
2. 然后建立AIDL,通过点击建立AIDL文件,如图
建立好之后,出现AIDL文件如图
但是此时并没有AIDL的java文件产生,其实android studio也是带有自动生成的,只不过需要确认一些信息后才能生成。此时,我们可以在目录 build--&generated--&source--&aidl--&test--&debug下面发现还没有任何文件
此时,打开AndroidManifest.xml,确认package的值,如我这个
& & & & & & & & & & & & & & & & & & & & & &
关键性的一步,确认aidl文件所在的包名和AndroidMainifest.xml的package名是否一致。如果一致,点击 Build--&Make Project,生成相应的java文件。如果不一致,则改aidl的包名,改成一致,再点击生成,生成效果如图。
则此时就可以在程序中通过AIDL调用远程Service的方法,实现AIDL与远程Service进行通信,代码展示如下。
MainActivity.java
public class MainActivity extends ActionBarActivity {
& & private MyServiceAIDL myServiceAIDL;& & private Intent binderI& & private final static boolean create_flag=& & private final static boolean destory_flag=& & private final static String TAG="MainActivity";
& & private ServiceConnection sc = new ServiceConnection() {& & & & @Override& & & & public void onServiceConnected(ComponentName name, IBinder service) {& & & & & & myServiceAIDL = MyServiceAIDL.Stub.asInterface(service);& & & & & & try {& & & & & & & & //通过AIDL远程调用& & & & & & & & Log.d(TAG,"++start download++");& & & & & & & & myServiceAIDL.DownLoad();& & & & & & } catch (RemoteException e) {& & & & & & & & e.printStackTrace();& & & & & & }& & & & }
& & & & @Override& & & & public void onServiceDisconnected(ComponentName name) {
& & & & }& & };
& & @Override& & protected void onCreate(Bundle savedInstanceState) {& & & & Log.d(TAG,"++MainActivity onCreate++");& & & & super.onCreate(savedInstanceState);& & & & setContentView(R.layout.activity_main);
& & & & //开启服务& & & & Intent intent = new Intent(this, MainService.class);& & & & startService(intent);
& & & & //连接远程Service和Activity& & & & binderIntent = new Intent(this,MainService.class);& & & & Bundle bundle = new Bundle();& & & & bundle.putBoolean("flag",create_flag);& & & & binderIntent.putExtras(bundle);& & & & bindService(binderIntent, sc, BIND_AUTO_CREATE);
& & @Override& & protected void onDestroy() {& & & & super.onDestroy();& & & & Log.d(TAG,"++MainActivity onDestroy++");
& & & & boolean flag =& & & & //暂停服务& & & & Intent intent = new Intent(this, MainService.class);& & & & stopService(intent);
& & & & //断开与远程Service的连接& & & & unbindService(sc);& & }}
MainService.java
public class MainService extends Service {
& && & private final static String TAG = "MainService";
& & @Override& & public void onDestroy() {& & & & super.onDestroy();& & & & Log.d(TAG, "++MainService onDestroy++");& & & & flag =& & }
& & @Override& & public int onStartCommand(Intent intent, int flags, int startId) {& & & & return super.onStartCommand(intent, flags, startId);& & }
& & @Override& & public void onCreate() {& & & & super.onCreate();& & & & Log.d(TAG, "++MainService onCreate++");
& & & & Notification no = new Notification(R.drawable.ic_launcher, "有通知到来", System.currentTimeMillis());& & & & Intent intent = new Intent(this, MainActivity.class);& & & & PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);& & & & no.setLatestEventInfo(this, "AIDLDemo", "running", pi);& & & & startForeground(1, no);& & }
& & @Override& & public IBinder onBind(Intent intent) {
& & & & Bundle bundle = intent.getExtras();& & & & flag = bundle.getBoolean("flag");& & & & System.out.println(flag);& & & && & }
& & MyServiceAIDL.Stub ms = new MyServiceAIDL.Stub() {& & & & @Override& & & & public void DownLoad() throws RemoteException {
& & & & & & new Thread(new Runnable() {& & & & & & & & int i = 0;
& & & & & & & & @Override& & & & & & & & public void run() {& & & & & & & & & & //未达到线程条件,会一直在后台运行,就算服务已经关闭& & & & & & & & & & while (flag) {
& & & & & & & & & & & & try {& & & & & & & & & & & & & & i++;& & & & & & & & & & & & & & System.out.println("i的值是" + i);& & & & & & & & & & & & & & Thread.sleep(1000);& & & & & & & & & & & & } catch (InterruptedException e) {& & & & & & & & & & & & & & e.printStackTrace();& & & & & & & & & & & & }& & & & & & & & & & }& & & & & & & & & & System.out.println("退出服务");& & & & & & & & }& & & & & & }).start();
& & & & }& & };}
AndroidManifest.xml
&application& & & & android:allowBackup="true"& & & & android:icon="@drawable/ic_launcher"& & & & android:label="@string/app_name"& & & & android:theme="@style/AppTheme"&& & & & &activity& & & & & & android:name=".MainActivity"& & & & & & android:label="@string/app_name"&& & & & & & &intent-filter&& & & & & & & & &action android:name="android.intent.action.MAIN" /&& & & & & & & & &category android:name="android.intent.category.LAUNCHER" /&& & & & & & &/intent-filter&& & & & &/activity&
& & & & &service& & & & & & android:name=".MainService"& & & & & & android:process=":remote"&&/service&& & &/application&
MyServiceAIDL.aidl
// myServiceAIDL.aidlpackage com.example.wanghao.
// Declare any non-default types here with import statements
interface MyServiceAIDL {
void DownLoad();}
12.04(64位)安装Android Studio 全过程 &
Android Studio v0.1尝鲜 &
Android Studio使用教程 &
Android Studio开发指南 &
Android Studio设置主题 和 不支持中文的问题解决方法 &
Android Studio 下载安装以及不能打开的解决办法 &
Android Studio安装使用图文教程 &
本文永久更新链接地址:
相关资讯 & & &
& (01月28日)
& (12/14/:44)
& (04月19日)
& (01月24日)
& (10/31/:12)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款当前位置: &
& android studio的aidl文件怎么创建?
android studio的aidl文件怎么创建?
类别:&&大小:813.00MB语言:简体中文&&授权:免费软件
  android studio的aidl文件是用来跨进程访问的,在很多的android 程序开发过程中都会需要创建一个AIDL服务,AIDL服务是什么,使用android studio创建AIDL接口服务之前需要做什么,该要如何创建这个文件呢?一起看看吧。  什么是AIDL服务  为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口。因此,可以将这种可以跨进程访问的服务称为AIDL(Android Interface Definition Language)服务。  android studio创建AIDL服务具体步骤如下:  1、要进行创建AIDL的接口之前,需要进行选中当前的项目的文件中,选中完成项目之后。  2、然后进行点击Android studio菜单中的“file”的选项,就会弹出了一个下拉的菜单中“new”选项。  3、就会弹出了一个下一级的菜单中,进行选择下一级菜单中的“AIDL”的选项。  4、就会弹出了一个菜单中,进行点击这个菜单中的“AIDL FILE”的选项。  5、就会弹出了一个AIDL的窗口的选项,需要给接口进行添加名称,在interface name的输入框中进行输入名称,点击”finish“的选项。  6、然后在项目中进行天机了一个aidl的文件,在该文件下中,有一个aidl的后缀的文件,其实就是一个接口文件。  实例:  服务器端:  本例中将建立一个简单的AIDL服务。这个AIDL服务只有一个getValue方法,该方法返回一个String类型的值。在安装完服务后,会在客户端调用这个getValue方法,并将返回值在TextView组件中输出。建立这个AIDL服务的步骤如下:  (1)建立一个aidl文件。在Java包目录中建立一个IMyService.aidl文件。IMyService.aidl文件的位置如图所示。  IMyService.aidl文件的内容如下:  package cn.m9.mobile.  interface IMyService {  String getValue();  }  IMyService.aidl文件的内容与Java代码非常相似,但要注意,不能加修饰符(例如,public、private)、AIDL服务不支持的数据类型(例如,InputStream、OutputStream)等内容。  (2)如果IMyService.aidl文件中的内容输入正确,ADT会自动生成一个IMyService.java文件。读者一般并不需要关心这个文件的具体内容,也不需要维护这个文件。  (3)编写一个MyService类。MyService是Service的子类,在MyService类中定义了一个内嵌类(MyServiceImpl),该类是IMyService.Stub的子类。MyService类的代码如下:  package cn.m9.mobile.  import android.app.S  import android.content.I  import android.os.IB  public class MyService extends Service {  public class MyServiceImpl extends IMyService.Stub {  public String getValue()  {  return &Android is very powerful&;  }  }  @Override  public IBinder onBind(Intent arg0) {  // TODO Auto-generated method stub  return new MyServiceImpl();  }  }  在编写上面代码时要注意如下两点:  IMyService.Stub是根据IMyService.aidl文件自动生成的,一般并不需要管这个类的内容,只需要编写一个继承于IMyService.Stub类的子类(MyServiceImpl类)即可。  onBind方法必须返回MyServiceImpl类的对象实例,否则客户端无法获得服务对象。  (4)在AndroidManifest.xml文件中配置MyService类,代码如下:  其中&cn.m9.activity.IMyService&是客户端用于访问AIDL服务的ID。  下面来编写客户端的调用代码。首先新建一个Eclipse Android工程(TestAidlClient),并将自动生成的IMyService.java文件连同包目录一起复制到 testAIDL_client工程的src目录中(R文件除外).  调用AIDL服务首先要绑定服务,然后才能获得服务对象,代码如下:  package cn.m9.  import cn.m9.mobile.R;  import cn.m9.mobile.aidl.IMyS  import android.app.A  import ponentN  import android.content.C  import android.content.I  import android.content.ServiceC  import android.os.B  import android.os.IB  import android.util.L  import android.view.V  import android.view.View.OnClickL  import android.widget.B  import android.widget.TextV  public class TestAidlClient extends Activity implements OnClickListener {  /** Called when the activity is first created. */  private IMyService myService =  private Button btnInvokeAIDLS  private Button btnBindAIDLS  private TextView textV  private static final String TAG=&TestAIDLClient&;  private ServiceConnection serviceConnection = new ServiceConnection()  {  @Override  public void onServiceConnected(ComponentName name, IBinder service) {  // TODO Auto-generated method stub  myService = IMyService.Stub.asInterface(service);  btnInvokeAIDLService.setEnabled(true);  }  @Override  public void onServiceDisconnected(ComponentName arg0) {  // TODO Auto-generated method stub  }  };  @Override  public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.main);  btnInvokeAIDLService = (Button) findViewById(R.id.btnInvokeAIDLService);  btnBindAIDLService = (Button) findViewById(R.id.btnBindAIDLService);  btnInvokeAIDLService.setEnabled(false);  textView = (TextView) findViewById(R.id.textview);  btnInvokeAIDLService.setOnClickListener(this);  btnBindAIDLService.setOnClickListener(this);  }  @Override  public void onClick(View view) {  // TODO Auto-generated method stub  switch (view.getId())  {  case R.id.btnBindAIDLService:  //绑定AIDL服务  bindService(new Intent(&cn.m9.mobile.aidl.IMyService&), serviceConnection,Context.BIND_AUTO_CREATE);    case R.id.btnInvokeAIDLService:  try{  textView.setText(myService.getValue());  } catch (Exception e)  {  }    }  }  }  在编写上面代码时应注意如下两点:  使用bindService方法来绑定AIDL服务。其中需要使用Intent对象指定AIDL服务的ID,也就是标签中android:name属性的值。  在绑定时需要一个ServiceConnection对象。创建ServiceConnection对象的过程中如果绑定成功,系统会调用onServiceConnected方法,通过该方法的service参数值可获得AIDL服务对象。  首先运行AIDL服务程序,然后运行客户端程序,单击【绑定AIDL服务】按钮,如果绑定成功,【调用AIDL服务】按钮会变为可选状态,单击这个按钮,会输出getValue方法的返回值.  总结:以上就是小编为大家带来的全部相关内容了,相信网友们都知道要怎么做了吧。 & &小编推荐: & & & & & &
  更多Android Studio教程,尽在
上一篇 &:
下一篇 &:
文章链接:/tutorials/58289.html
(转载时请注明本文出处及文章链接)Android Studio开发环境建立aidl文件,不自动生成java文件?在Eclipse中建立aidl文件后在gen文件夹下会自动生成一个java文件,但是在Android
Studio中就不会?
解决方案:
先在main目录下新建一个文件夹,命名为aidl,再在该目录下新建一个包,包名跟AndroidManifest中的package同名,然后在该包下创建aidl文件,创建完之后在build/generated/source/aidl/debug下就可以见到自动生成的java文件
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3895次
排名:千里之外
(1)(1)(4)(1)(1)}

我要回帖

更多关于 怎样退订流量套餐 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信