Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,218
#1

Aidle файл - Android

06.08.2015, 12:00. Просмотров 175. Ответов 2
Метки нет (Все метки)

что такое .aidl файл и для чего он в Android studio?? И как его правильно импортировать в проект??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2015, 12:00     Aidle файл
Посмотрите здесь:

При записи в файл, в какую папку записывается файл? Android
Android Файл: создать файл в приложении для хранения характеристик персонажа

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
06.08.2015, 13:21     Aidle файл #2
yura91, это файл для межпроцессной коммуникации. Зачем он Вам? Он нужен для обмена данными между двумя несвязанными сервисами.
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,218
06.08.2015, 14:42  [ТС]     Aidle файл #3
Что значит несвязанные сервисы можете пояснить а в каком случае они будут связанные??Я просто использую библиотеку ASL(Android Screenshot Library) в ней используется aidl файл
Java
1
2
3
4
5
6
7
8
9
10
11
12
package pl.polidea.asl;
 
 
// Interface for fetching screenshots
interface IScreenshotProvider {
    // Checks whether the native background application is running
    // (and thus whether the screenshots are available)
    boolean isAvailable();
 
    // Create a screen snapshot and returns path to file where it is written.
    String takeScreenshot();
}
это aidl файл

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
public class ScreenshotService extends Service {
    
    /*
     * Action name for intent used to bind to service.
     */
    public static final String BIND = "pl.polidea.asl.ScreenshotService.BIND";  
 
    /*
     * Name of the native process.
     */
    private static final String NATIVE_PROCESS_NAME = "asl-native"; 
 
    /*
     * Port number used to communicate with native process.
     */
    private static final int PORT = 42380;
 
    /*
     * Timeout allowed in communication with native process.
     */
    private static final int TIMEOUT = 1000;  
 
    /*
     * Directory where screenshots are being saved.
     */
    private static String SCREENSHOT_FOLDER = "/sdcard/screens/";
 
 
    /*
     * An implementation of interface used by clients to take screenshots.
     */
    private final IScreenshotProvider.Stub mBinder = new IScreenshotProvider.Stub() {
 
        @Override
        public String takeScreenshot() throws RemoteException {
            try {
                return ScreenshotService.this.takeScreenshot();
            }
            catch(Exception e) { return null; }
        }
 
        @Override
        public boolean isAvailable() throws RemoteException {
            return isNativeRunning();
        }
    };
    
    @Override
    public void onCreate() {
        Log.i("service", "Service created."); 
    }
 
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }
 
 
    /*
     * Checks whether the internal native application is running,
     */
    private boolean isNativeRunning() {
        try {
            Socket sock = new Socket();
            sock.connect(new InetSocketAddress("localhost", PORT), 10); // short timeout
        }
        catch (Exception e) {
            return false;
        }
        return true;
//      ActivityManager am = (ActivityManager)getSystemService(Service.ACTIVITY_SERVICE);
//      List<ActivityManager.RunningAppProcessInfo> ps = am.getRunningAppProcesses();
//
//      if (am != null) {
//          for (ActivityManager.RunningAppProcessInfo rapi : ps) {
//              if (rapi.processName.contains(NATIVE_PROCESS_NAME))
//                  // native application found
//                  return true;
//          }
//
//      }
//      return false;
    }
    
    
    /*
     * Internal class describing a screenshot.
     */
    class Screenshot {
        public Buffer pixels;
        public int width;
        public int height;
        public int bpp;
        
        public boolean isValid() {
            if (pixels == null || pixels.capacity() == 0 || pixels.limit() == 0) return false;
            if (width <= 0 || height <= 0)  return false;
            return true;
        }
    }
    
    
    /*
     * Determines whether the phone's screen is rotated.
     */
    private int getScreenRotation()  {
        WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE);
        Display disp = wm.getDefaultDisplay();
        
        // check whether we operate under Android 2.2 or later
        try {
            Class<?> displayClass = disp.getClass();
            Method getRotation = displayClass.getMethod("getRotation");
            int rot = ((Integer)getRotation.invoke(disp)).intValue();
            
                switch (rot) {
                    case Surface.ROTATION_0:    return 0;
                    case Surface.ROTATION_90:   return 90;
                    case Surface.ROTATION_180return 180;
                    case Surface.ROTATION_270return 270;
                    default:                    return 0;
                }
        } catch (NoSuchMethodException e) {
            // no getRotation() method -- fall back to dispation()
            int orientation = disp.getOrientation();
 
            // Sometimes you may get undefined orientation Value is 0
            // simple logic solves the problem compare the screen
            // X,Y Co-ordinates and determine the Orientation in such cases
            if(orientation==Configuration.ORIENTATION_UNDEFINED){
 
                Configuration config = getResources().getConfiguration();
                orientation = config.orientation;
 
                if(orientation==Configuration.ORIENTATION_UNDEFINED){
                    //if height and widht of screen are equal then
                    // it is square orientation
                    if(disp.getWidth()==disp.getHeight()){
                        orientation = Configuration.ORIENTATION_SQUARE;
                    }else{ //if widht is less than height than it is portrait
                        if(disp.getWidth() < disp.getHeight()){
                            orientation = Configuration.ORIENTATION_PORTRAIT;
                        }else{ // if it is not any of the above it will defineitly be landscape
                            orientation = Configuration.ORIENTATION_LANDSCAPE;
                        }
                    }
                }
            }
            
            return orientation == 1 ? 0 : 90; // 1 for portrait, 2 for landscape
        } catch (Exception e) {
            return 0; // bad, I know ;P
        }
    }
    
 
    /*
     * Communicates with the native service and retrieves a screenshot from it
     * as a 2D array of bytes.
     */
    private Screenshot retreiveRawScreenshot() throws Exception {
        try {
            // connect to native application
            Socket s = new Socket();
            s.connect(new InetSocketAddress("localhost", PORT), TIMEOUT);
 
            // send command to take screenshot
            OutputStream os = s.getOutputStream();
            os.write("SCREEN".getBytes("ASCII"));
 
            // retrieve response -- first the size and BPP of the screenshot
            InputStream is = s.getInputStream();
            StringBuilder sb = new StringBuilder();
            int c;
            while ((c = is.read()) != -1) {
                if (c == 0) break;
                sb.append((char)c);
            }
 
            // parse it
            String[] screenData = sb.toString().split(" ");
            if (screenData.length >= 3) {
                Screenshot ss = new Screenshot();
                ss.width = Integer.parseInt(screenData[0]);
                ss.height = Integer.parseInt(screenData[1]);
                ss.bpp = Integer.parseInt(screenData[2]);
 
                // retreive the screenshot
                // (this method - via ByteBuffer - seems to be the fastest)
                ByteBuffer bytes = ByteBuffer.allocate (ss.width * ss.height * ss.bpp / 8);
                is = new BufferedInputStream(is);   // buffering is very important apparently
                is.read(bytes.array());             // reading all at once for speed
                bytes.position(0);                  // reset position to the beginning of ByteBuffer
                ss.pixels = bytes;
                
                return ss;
            }
        }
        catch (Exception e) {
            throw new Exception(e);
        }
        finally {}
 
        return null;
    }
 
    /*
     * Saves given array of bytes into image file in the PNG format.
     */
    private void writeImageFile(Screenshot ss, String file) {
        if (ss == null || !ss.isValid())        throw new IllegalArgumentException();
        if (file == null || file.length() == 0) throw new IllegalArgumentException();
        
        // resolve screenshot's BPP to actual bitmap pixel format
        Bitmap.Config pf;
        switch (ss.bpp) {
            case 16:    pf = Config.RGB_565; break;
            case 32:    pf = Config.ARGB_8888; break;
            default:    pf = Config.ARGB_8888; break;
        }
 
        // create appropriate bitmap and fill it wit data
        Bitmap bmp = Bitmap.createBitmap(ss.width, ss.height, pf);
        bmp.copyPixelsFromBuffer(ss.pixels);
        
        // handle the screen rotation
        int rot = getScreenRotation();
        if (rot != 0) {
            Matrix matrix = new Matrix();
            matrix.postRotate(-rot);
            bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
        }
 
        // save it in PNG format
        FileOutputStream fos;
        try {
            fos = new FileOutputStream(file);
        } catch (FileNotFoundException e) {
            throw new InvalidParameterException();
        }
        bmp.compress(CompressFormat.PNG, 100, fos);
    }
 
    /*
     * Takes screenshot and saves to a file.
     */
    private String takeScreenshot() throws IOException {
        // make sure the path to save screens exists
        File screensPath = new File(SCREENSHOT_FOLDER);
        screensPath.mkdirs();
            
        // construct screenshot file name
        StringBuilder sb = new StringBuilder();
        sb.append(SCREENSHOT_FOLDER);
        sb.append(Math.abs(UUID.randomUUID().hashCode()));  // hash code of UUID should be quite random yet short
        sb.append(".png");
        String file = sb.toString();
 
        // fetch the screen and save it
        Screenshot ss = null;
        try {
            ss = retreiveRawScreenshot();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        writeImageFile(ss, file);
 
        return file;
    }
}
Это сам сервис.

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="pl.polidea.asl.demo"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
        <activity android:name=".ScreenshotDemo"
                  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="pl.polidea.asl.ScreenshotService">
            <intent-filter>
                <action android:name="pl.polidea.asl.ScreenshotService.BIND" />
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </service>
</application>
 
 
</manifest>
Это манифест. Можете пожалуйста обьяснить для чего используется .aidl файл в данном контексте?? И еще если не сложно что такое PowerShell script и зачем он нужен?? Как его запустить из командной строки Windows??

Добавлено через 5 минут
Просто в документации к библиотеке написано "Execute one of the run.xxx scripts included in the ASL package, appropriate for your operating system and shell:
for Windows systems, run.ps1 (PowerShell script) is recommended. There is also Batch script under run.bat."
Как я понимаю это нужно запустить один из скриптов включенных в данную библиотеку ASL(библиотека для скриншотов без рут прав) в соответсвии с моей операционной системой у меня Windows 7 и мне нужно запустить PowerShell script а что это я не совсем понимаю можете обьяснить??
Yandex
Объявления
06.08.2015, 14:42     Aidle файл
Ответ Создать тему
Опции темы

Текущее время: 12:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru